/// <summary>
        /// Takes "order by" clause in the mapping attribute and iterpolates the alias
        /// </summary>
        /// <param name="orderBySql">The "order by" sql statement from the mapping.</param>
        /// <param name="dialect">The <see cref="Dialect.Dialect"/> to help with rendering the Sql.</param>
        /// <returns>
        /// A well formed "order by" sql statement for the <see cref="Dialect.Dialect"/>.
        /// </returns>
        public static string RenderOrderByStringTemplate(string orderBySql, Dialect.Dialect dialect)
        {
            //TODO: make this a bit nicer
            StringTokenizer tokens      = new StringTokenizer(orderBySql, ",", false);
            StringBuilder   result      = new StringBuilder(orderBySql.Length + 2);
            bool            commaNeeded = false;
            IEnumerator     tokenEnum   = tokens.GetEnumerator();

            while (tokenEnum.MoveNext())
            {
                string column = Quote((( string )tokenEnum.Current).Trim(), dialect);

                if (commaNeeded)
                {
                    result.Append(StringHelper.CommaSpace);
                }
                commaNeeded = true;

                result.Append(Placeholder)
                .Append(StringHelper.Dot)
                .Append(column);
            }

            return(result.ToString());
        }
        public SqlText ParseInlineParameterMap(IScope scope, IStatement statement, string sqlStatement)
        {
            string    str  = sqlStatement;
            ArrayList list = new ArrayList();
            Type      parameterClassType = null;

            if (statement != null)
            {
                parameterClassType = statement.ParameterClass;
            }
            StringTokenizer tokenizer  = new StringTokenizer(sqlStatement, "#", true);
            StringBuilder   builder    = new StringBuilder();
            string          current    = null;
            string          str3       = null;
            IEnumerator     enumerator = tokenizer.GetEnumerator();

            while (enumerator.MoveNext())
            {
                current = (string)enumerator.Current;
                if ("#".Equals(str3))
                {
                    if ("#".Equals(current))
                    {
                        builder.Append("#");
                        current = null;
                    }
                    else
                    {
                        ParameterProperty property = null;
                        if (current.IndexOf(":") > -1)
                        {
                            property = this.OldParseMapping(current, parameterClassType, scope);
                        }
                        else
                        {
                            property = this.NewParseMapping(current, parameterClassType, scope);
                        }
                        list.Add(property);
                        builder.Append("? ");
                        enumerator.MoveNext();
                        current = (string)enumerator.Current;
                        if (!"#".Equals(current))
                        {
                            throw new DataMapperException("Unterminated inline parameter in mapped statement (" + statement.Id + ").");
                        }
                        current = null;
                    }
                }
                else if (!"#".Equals(current))
                {
                    builder.Append(current);
                }
                str3 = current;
            }
            str = builder.ToString();
            ParameterProperty[] propertyArray = (ParameterProperty[])list.ToArray(typeof(ParameterProperty));
            return(new SqlText {
                Text = str, Parameters = propertyArray
            });
        }
Exemple #3
0
        /// <summary>
        ///  Returns the MemberInfo of the set member on the specified type.
        /// </summary>
        /// <param name="type">The type to check</param>
        /// <param name="memberName">The name of the member</param>
        /// <returns>The type of the member</returns>
        public static MemberInfo GetMemberInfoForSetter(Type type, string memberName)
        {
            MemberInfo memberInfo = null;

            if (memberName.IndexOf('.') > -1)
            {
                StringTokenizer parser     = new StringTokenizer(memberName, ".");
                IEnumerator     enumerator = parser.GetEnumerator();
                Type            parentType = null;

                while (enumerator.MoveNext())
                {
                    memberName = (string)enumerator.Current;
                    parentType = type;
                    type       = ReflectionInfo.GetInstance(type).GetSetterType(memberName);
                }
                memberInfo = ReflectionInfo.GetInstance(parentType).GetSetter(memberName);
            }
            else
            {
                memberInfo = ReflectionInfo.GetInstance(type).GetSetter(memberName);
            }

            return(memberInfo);
        }
        /// <summary>
        /// Return the specified member on an object.
        /// </summary>
        /// <param name="obj">The Object on which to invoke the specified property.</param>
        /// <param name="memberName">Name of the member.</param>
        /// <param name="accessorFactory">The accessor factory.</param>
        /// <returns>An Object representing the return value of the invoked property.</returns>
        public static object GetMemberValue(object obj, string memberName,
                                            AccessorFactory accessorFactory)
        {
            if (memberName.IndexOf('.') > -1)
            {
                StringTokenizer parser     = new StringTokenizer(memberName, ".");
                IEnumerator     enumerator = parser.GetEnumerator();
                object          value      = obj;
                string          token      = null;

                while (enumerator.MoveNext())
                {
                    token = (string)enumerator.Current;
                    value = GetMember(value, token, accessorFactory);

                    if (value == null)
                    {
                        break;
                    }
                }
                return(value);
            }
            else
            {
                return(GetMember(obj, memberName, accessorFactory));
            }
        }
Exemple #5
0
        /// <summary>
        /// Checks to see if the Object have a property/field be a given name.
        /// </summary>
        /// <param name="obj">The Object on which to invoke the specified property.</param>
        /// <param name="propertyName">The name of the property to check for.</param>
        /// <returns>
        /// True or false if the property exists and is readable.
        /// </returns>
        public static bool HasReadableProperty(object obj, string propertyName)
        {
            bool hasProperty = false;

            if (obj is IDictionary)
            {
                hasProperty = ((IDictionary)obj).Contains(propertyName);
            }
            else
            {
                if (propertyName.IndexOf('.') > -1)
                {
                    StringTokenizer parser     = new StringTokenizer(propertyName, ".");
                    IEnumerator     enumerator = parser.GetEnumerator();
                    Type            type       = obj.GetType();

                    while (enumerator.MoveNext())
                    {
                        propertyName = (string)enumerator.Current;
                        type         = ReflectionInfo.GetInstance(type).GetGetterType(propertyName);
                        hasProperty  = ReflectionInfo.GetInstance(type).HasReadableMember(propertyName);
                    }
                }
                else
                {
                    hasProperty = ReflectionInfo.GetInstance(obj.GetType()).HasReadableMember(propertyName);
                }
            }

            return(hasProperty);
        }
        public void NotSoSimpleWithDelimiters()
        {
            string          s          = "The lazy... I don't know ";
            StringTokenizer st         = new StringTokenizer(s, " .", true);
            IEnumerator     enumerator = st.GetEnumerator();

            enumerator.MoveNext();
            Assert.AreEqual("The", (string)enumerator.Current, "Can't get first token");
            enumerator.MoveNext();
            Assert.AreEqual(" ", (string)enumerator.Current, "Can't get first space");
            enumerator.MoveNext();
            Assert.AreEqual("lazy", (string)enumerator.Current, "Can't get second token");
            enumerator.MoveNext();
            Assert.AreEqual(".", (string)enumerator.Current, "Can't get first dot");
            enumerator.MoveNext();
            Assert.AreEqual(".", (string)enumerator.Current, "Can't get second dot");
            enumerator.MoveNext();
            Assert.AreEqual(".", (string)enumerator.Current, "Can't get third dot");
            enumerator.MoveNext();
            Assert.AreEqual(" ", (string)enumerator.Current, "Can't get second space");
            enumerator.MoveNext();
            Assert.AreEqual("I", (string)enumerator.Current, "Can't get third token");
            enumerator.MoveNext();
            Assert.AreEqual(" ", (string)enumerator.Current, "Can't get third space");
            enumerator.MoveNext();
            Assert.AreEqual("don't", (string)enumerator.Current, "Can't get fourth token");
            enumerator.MoveNext();
            Assert.AreEqual(" ", (string)enumerator.Current, "Can't get fourth space");
            enumerator.MoveNext();
            Assert.AreEqual("know", (string)enumerator.Current, "Can't get fifth token");
            enumerator.MoveNext();
            Assert.AreEqual(" ", (string)enumerator.Current, "Can't get last space");
            Assert.AreEqual(false, enumerator.MoveNext(), "Still thinking there are more tokens");
        }
Exemple #7
0
        private void EvaluateParameterMap()
        {
            string          delimiters    = "?";
            string          current       = null;
            int             num           = 0;
            string          parameterName = string.Empty;
            StringTokenizer tokenizer     = new StringTokenizer(this._commandText, delimiters, true);
            StringBuilder   builder       = new StringBuilder();
            IEnumerator     enumerator    = tokenizer.GetEnumerator();

            while (enumerator.MoveNext())
            {
                current = (string)enumerator.Current;
                if (delimiters.Equals(current))
                {
                    ParameterProperty property  = this._request.ParameterMap.Properties[num];
                    IDataParameter    parameter = null;
                    if (this._session.DataSource.DbProvider.UsePositionalParameters)
                    {
                        if (this._parameterPrefix.Equals(":"))
                        {
                            parameterName = ":" + num;
                        }
                        else
                        {
                            parameterName = "?";
                        }
                    }
                    else
                    {
                        parameter = (IDataParameter)this._propertyDbParameterMap[property];
                        if (this._session.DataSource.DbProvider.UseParameterPrefixInParameter)
                        {
                            if (this._session.DataSource.DbProvider.Name.IndexOf("ByteFx") >= 0)
                            {
                                parameterName = this._parameterPrefix + parameter.ParameterName;
                            }
                            else
                            {
                                parameterName = parameter.ParameterName;
                            }
                        }
                        else
                        {
                            parameterName = this._parameterPrefix + parameter.ParameterName;
                        }
                    }
                    builder.Append(" ");
                    builder.Append(parameterName);
                    parameterName = string.Empty;
                    num++;
                }
                else
                {
                    builder.Append(current);
                }
            }
            this._preparedStatement.PreparedSql = builder.ToString();
        }
        public void OnlyDelimitersWithoutDelimiters()
        {
            string          s          = " .,,,";
            StringTokenizer st         = new StringTokenizer(s, " ,.", false);
            IEnumerator     enumerator = st.GetEnumerator();

            Assert.AreEqual(false, enumerator.MoveNext(), "Still thinking there are more tokens");
        }
Exemple #9
0
        private IReadOnlyList <string> ExpandGlobbedUrl(string include, string exclude)
        {
            if (string.IsNullOrEmpty(include))
            {
                return(Array.Empty <string>());
            }

            var cacheKey = new GlobbingUrlKey(include, exclude);

            if (Cache.TryGetValue(cacheKey, out List <string> files))
            {
                return(files);
            }

            var includeTokenizer  = new StringTokenizer(include, PatternSeparator);
            var includeEnumerator = includeTokenizer.GetEnumerator();

            if (!includeEnumerator.MoveNext())
            {
                return(Array.Empty <string>());
            }

            var options = new MemoryCacheEntryOptions();
            var trimmedIncludePatterns = new List <string>();

            foreach (var includePattern in includeTokenizer)
            {
                var changeToken = FileProvider.Watch(includePattern.Value);
                options.AddExpirationToken(changeToken);
                trimmedIncludePatterns.Add(NormalizePath(includePattern));
            }
            var matcher = MatcherBuilder != null?MatcherBuilder() : new Matcher();

            matcher.AddIncludePatterns(trimmedIncludePatterns);

            if (!string.IsNullOrWhiteSpace(exclude))
            {
                var excludeTokenizer       = new StringTokenizer(exclude, PatternSeparator);
                var trimmedExcludePatterns = new List <string>();
                foreach (var excludePattern in excludeTokenizer)
                {
                    trimmedExcludePatterns.Add(NormalizePath(excludePattern));
                }
                matcher.AddExcludePatterns(trimmedExcludePatterns);
            }

            var(matchedUrls, sizeInBytes) = FindFiles(matcher);
            options.SetSize(sizeInBytes);

            return(Cache.Set(
                       cacheKey,
                       matchedUrls,
                       options));
        }
Exemple #10
0
    public void TokenizerReturnsEmptySequenceForNullValues()
    {
        // Arrange
        var stringTokenizer = new StringTokenizer();
        var enumerator      = stringTokenizer.GetEnumerator();

        // Act
        var next = enumerator.MoveNext();

        // Assert
        Assert.False(next);
    }
        private string ProcessDynamicElements(object parameterObject)
        {
            StringTokenizer tokenizer  = new StringTokenizer(this._simpleSqlStatement, "$", true);
            StringBuilder   builder    = new StringBuilder();
            string          current    = null;
            string          str2       = null;
            IEnumerator     enumerator = tokenizer.GetEnumerator();

            while (enumerator.MoveNext())
            {
                current = (string)enumerator.Current;
                if ("$".Equals(str2))
                {
                    if ("$".Equals(current))
                    {
                        builder.Append("$");
                        current = null;
                    }
                    else
                    {
                        object obj2 = null;
                        if (parameterObject != null)
                        {
                            if (this._dataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterObject.GetType()))
                            {
                                obj2 = parameterObject;
                            }
                            else
                            {
                                obj2 = ObjectProbe.GetMemberValue(parameterObject, current, this._dataExchangeFactory.AccessorFactory);
                            }
                        }
                        if (obj2 != null)
                        {
                            builder.Append(obj2.ToString());
                        }
                        enumerator.MoveNext();
                        current = (string)enumerator.Current;
                        if (!"$".Equals(current))
                        {
                            throw new DataMapperException("Unterminated dynamic element in sql (" + this._simpleSqlStatement + ").");
                        }
                        current = null;
                    }
                }
                else if (!"$".Equals(current))
                {
                    builder.Append(current);
                }
                str2 = current;
            }
            return(builder.ToString());
        }
        public void SimpleStringWithoutDelimiters()
        {
            string          s          = "Hello world!";
            StringTokenizer st         = new StringTokenizer(s);
            IEnumerator     enumerator = st.GetEnumerator();

            enumerator.MoveNext();
            Assert.AreEqual("Hello", (string)enumerator.Current, "Can't get first token");
            enumerator.MoveNext();
            Assert.AreEqual("world!", (string)enumerator.Current, "Can't get second token");
            Assert.AreEqual(false, enumerator.MoveNext(), "Still thinking there are more tokens");
        }
Exemple #13
0
            public ProductSearch(String keywords)
            {
                StringTokenizer splitter = new StringTokenizer(keywords, " ", false);
                string          token    = null;

                IEnumerator enumerator = splitter.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    token = (string)enumerator.Current;
                    keywordList.Add("%" + token + "%");
                }
            }
Exemple #14
0
        /// <summary>
        ///  Returns the type that the get expects to receive as a parameter when
        ///  setting a member value.
        /// </summary>
        /// <param name="obj">The object to check</param>
        /// <param name="memberName">The name of the member</param>
        /// <returns>The type of the member</returns>
        public static Type GetMemberTypeForGetter(object obj, string memberName)
        {
            Type type = obj.GetType();

            if (obj is IDictionary)
            {
                IDictionary map   = (IDictionary)obj;
                object      value = map[memberName];
                if (value == null)
                {
                    type = typeof(object);
                }
                else
                {
                    type = value.GetType();
                }
            }
            else if (obj is IDictionary <string, object> )
            {
                IDictionary <string, object> map = (IDictionary <string, object>)obj;
                object value = map[memberName];
                if (value == null)
                {
                    type = typeof(object);
                }
                else
                {
                    type = value.GetType();
                }
            }
            else
            {
                if (memberName.IndexOf('.') > -1)
                {
                    StringTokenizer parser     = new StringTokenizer(memberName, ".");
                    IEnumerator     enumerator = parser.GetEnumerator();

                    while (enumerator.MoveNext())
                    {
                        memberName = (string)enumerator.Current;
                        type       = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
                    }
                }
                else
                {
                    type = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
                }
            }

            return(type);
        }
Exemple #15
0
        public int UsingUnsafeStringTokenizer()
        {
            StringTokenizer tokenizer = new StringTokenizer(Text, _separators, Options);

            int count = 0;

            StringTokenizer.Enumerator e = tokenizer.GetEnumerator();
            while (e.MoveNext())
            {
                StringSegment segment = e.Current;
                StringSegment value   = segment.UnsafeTrim();
                count++;
            }

            return(count);
        }
        public void OnlyDelimitersWithDelimiters()
        {
            string          s          = " .,,,";
            StringTokenizer st         = new StringTokenizer(s, " ,.", true);
            IEnumerator     enumerator = st.GetEnumerator();

            enumerator.MoveNext();
            Assert.AreEqual(" ", (string)enumerator.Current, "Can't get first delimiter");
            enumerator.MoveNext();
            Assert.AreEqual(".", (string)enumerator.Current, "Can't get second delimiter");
            enumerator.MoveNext();
            Assert.AreEqual(",", (string)enumerator.Current, "Can't get third delimiter");
            enumerator.MoveNext();
            Assert.AreEqual(",", (string)enumerator.Current, "Can't get fourth delimiter");
            enumerator.MoveNext();
            Assert.AreEqual(",", (string)enumerator.Current, "Can't get fifth delimiter");
            Assert.AreEqual(false, enumerator.MoveNext(), "Still thinking there are more tokens");
        }
        private bool Parse(PathString path, out StringSegment contract, out StringSegment action)
        {
            contract = StringSegment.Empty;
            action   = StringSegment.Empty;

            if (!path.HasValue)
            {
                return(false);
            }

            StringTokenizer tokenizer = new StringTokenizer(path, PathSeparators);

            using (var enumerator = tokenizer.GetEnumerator())
            {
                if (!string.IsNullOrEmpty(Options.Prefix))
                {
                    while (enumerator.MoveNext())
                    {
                        if (enumerator.Current.Equals(Options.Prefix, StringComparison.OrdinalIgnoreCase))
                        {
                            break;
                        }
                    }
                }

                if (!enumerator.MoveNext())
                {
                    return(false);
                }

                contract = enumerator.Current;

                if (!enumerator.MoveNext())
                {
                    return(false);
                }

                action = enumerator.Current;
            }

            return(true);
        }
Exemple #18
0
    public static void Main1()
    {
        StringTokenizer tokenizer = new StringTokenizer("192.168.0.1", '.');

        IEnumerator e = tokenizer.GetEnumerator();

        while (e.MoveNext())
        {
            Console.Write(e.Current + " ");
        }
        Console.WriteLine();


        //foreach를 컴파일러가 위의 식으로 바꿔준다
        foreach (var token in tokenizer)
        {
            Console.Write(token + " ");
        }
        Console.WriteLine();
    }
Exemple #19
0
        private void InitParameterBookKeeping()
        {
            StringTokenizer st     = new StringTokenizer(queryString, ParserHelper.HqlSeparators, true);
            ISet            result = new HashedSet();

            IEnumerator enumer = st.GetEnumerator();

            while (enumer.MoveNext())
            {
                string str = (string)enumer.Current;
                if (str.StartsWith(ParserHelper.HqlVariablePrefix))
                {
                    result.Add(str.Substring(1));
                }
            }

            actualNamedParameters = result;
            // TODO: This is weak as it doesn't take account of ? embedded in the SQL
            positionalParameterCount = StringHelper.CountUnquoted(queryString, StringHelper.SqlParameter.ToCharArray()[0]);
        }
Exemple #20
0
        /// <summary>
        ///  Returns the type that the get expects to receive as a parameter when
        ///  setting a member value.
        /// </summary>
        /// <param name="type">The type to check</param>
        /// <param name="memberName">The name of the member</param>
        /// <returns>The type of the member</returns>
        public static Type GetMemberTypeForGetter(Type type, string memberName)
        {
            if (memberName.IndexOf('.') > -1)
            {
                StringTokenizer parser     = new StringTokenizer(memberName, ".");
                IEnumerator     enumerator = parser.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    memberName = (string)enumerator.Current;
                    type       = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
                }
            }
            else
            {
                type = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
            }

            return(type);
        }
Exemple #21
0
        /// <summary>
        /// Sets the member value.
        /// </summary>
        /// <param name="obj">he Object on which to invoke the specified mmber.</param>
        /// <param name="memberName">Name of the member.</param>
        /// <param name="memberValue">The member value.</param>
        /// <param name="objectFactory">The object factory.</param>
        /// <param name="accessorFactory">The accessor factory.</param>
        public static void SetMemberValue(object obj, string memberName, object memberValue,
                                          IObjectFactory objectFactory,
                                          AccessorFactory accessorFactory)
        {
            if (memberName.IndexOf('.') > -1)
            {
                StringTokenizer parser     = new StringTokenizer(memberName, ".");
                IEnumerator     enumerator = parser.GetEnumerator();
                enumerator.MoveNext();

                string currentPropertyName = (string)enumerator.Current;
                object child = obj;

                while (enumerator.MoveNext())
                {
                    Type   type   = GetMemberTypeForSetter(child, currentPropertyName);
                    object parent = child;
                    child = GetMember(parent, currentPropertyName, accessorFactory);
                    if (child == null)
                    {
                        try
                        {
                            IFactory factory = objectFactory.CreateFactory(type, Type.EmptyTypes);
                            child = factory.CreateInstance(Type.EmptyTypes);

                            SetMemberValue(parent, currentPropertyName, child, objectFactory, accessorFactory);
                        }
                        catch (Exception e)
                        {
                            throw new ProbeException("Cannot set value of property '" + memberName + "' because '" + currentPropertyName + "' is null and cannot be instantiated on instance of " + type.Name + ". Cause:" + e.Message, e);
                        }
                    }
                    currentPropertyName = (string)enumerator.Current;
                }
                SetMember(child, currentPropertyName, memberValue, accessorFactory);
            }
            else
            {
                SetMember(obj, memberName, memberValue, accessorFactory);
            }
        }
Exemple #22
0
		/// <summary>
		/// Checks to see if the Object have a property/field be a given name.
		/// </summary>
		/// <param name="obj">The Object on which to invoke the specified property.</param>
		/// <param name="propertyName">The name of the property to check for.</param>
		/// <returns>
		/// True or false if the property exists and is readable.
		/// </returns>
		public static bool HasReadableProperty(object obj, string propertyName) 
		{
			bool hasProperty = false;

			if (obj is IDictionary) 
			{
				hasProperty = ((IDictionary) obj).Contains(propertyName);
			} 
			else 
			{
				if (propertyName.IndexOf('.') > -1) 
				{
					StringTokenizer parser = new StringTokenizer(propertyName, ".");
					IEnumerator enumerator = parser.GetEnumerator();
					Type type = obj.GetType();

					while (enumerator.MoveNext()) 
					{ 
						propertyName = (string)enumerator.Current;
						type = ReflectionInfo.GetInstance(type).GetGetterType(propertyName);
						hasProperty = ReflectionInfo.GetInstance(type).HasReadableMember(propertyName);
					}
				} 
				else 
				{
					hasProperty = ReflectionInfo.GetInstance(obj.GetType()).HasReadableMember(propertyName);
				}
			}
			
			return hasProperty;
		}
Exemple #23
0
        /// <summary>
        /// Sets the member value.
        /// </summary>
        /// <param name="obj">he Object on which to invoke the specified mmber.</param>
        /// <param name="memberName">Name of the member.</param>
        /// <param name="memberValue">The member value.</param>
        /// <param name="objectFactory">The object factory.</param>
        /// <param name="accessorFactory">The accessor factory.</param>
        public static void SetMemberValue(object obj, string memberName, object memberValue,
			IObjectFactory objectFactory,
            AccessorFactory accessorFactory)
		{
			if (memberName.IndexOf('.') > -1) 
			{
				StringTokenizer parser = new StringTokenizer(memberName, ".");
				IEnumerator enumerator = parser.GetEnumerator();
				enumerator.MoveNext();

				string currentPropertyName = (string)enumerator.Current;
				object child = obj;
      
				while (enumerator.MoveNext()) 
				{
					Type type = GetMemberTypeForSetter(child, currentPropertyName);
					object parent = child;
                    child = GetMember(parent, currentPropertyName, accessorFactory);
					if (child == null) 
					{
						try 
						{
							IFactory factory = objectFactory.CreateFactory(type, Type.EmptyTypes);
							child = factory.CreateInstance(Type.EmptyTypes);

                            SetMemberValue(parent, currentPropertyName, child, objectFactory, accessorFactory);
						} 
						catch (Exception e) 
						{
							throw new ProbeException("Cannot set value of property '" + memberName + "' because '" + currentPropertyName + "' is null and cannot be instantiated on instance of " + type.Name + ". Cause:" + e.Message, e);
						}
					}
					currentPropertyName = (string)enumerator.Current;
				}
                SetMember(child, currentPropertyName, memberValue, accessorFactory);
			} 
			else 
			{
                SetMember(obj, memberName, memberValue, accessorFactory);
			}
		}
Exemple #24
0
        /// <summary>
        /// Return the specified member on an object. 
        /// </summary>
        /// <param name="obj">The Object on which to invoke the specified property.</param>
        /// <param name="memberName">Name of the member.</param>
        /// <param name="accessorFactory">The accessor factory.</param>
        /// <returns>An Object representing the return value of the invoked property.</returns>
		public static object GetMemberValue(object obj, string memberName,
            AccessorFactory accessorFactory)
        {
            if (memberName.IndexOf('.') > -1) 
			{
				StringTokenizer parser = new StringTokenizer(memberName, ".");
				IEnumerator enumerator = parser.GetEnumerator();
				object value = obj;

			    while (enumerator.MoveNext()) 
				{
					string token = (string)enumerator.Current;
                    value = GetMember(value, token, accessorFactory);

					if (value == null) 
					{
						break;
					}
				}
				return value;
			}
            return GetMember(obj, memberName, accessorFactory);
        }
Exemple #25
0
		/// <summary>
		///  Returns the MemberInfo of the set member on the specified type.
		/// </summary>
		/// <param name="type">The type to check</param>
		/// <param name="memberName">The name of the member</param>
		/// <returns>The type of the member</returns>
		public static MemberInfo GetMemberInfoForSetter(Type type, string memberName) 
		{
			MemberInfo memberInfo =null;
			if (memberName.IndexOf('.') > -1) 
			{
				StringTokenizer parser = new StringTokenizer(memberName, ".");
				IEnumerator enumerator = parser.GetEnumerator();
				Type parentType = null;

				while (enumerator.MoveNext()) 
				{
					memberName = (string)enumerator.Current;
					parentType = type;
					type = ReflectionInfo.GetInstance(type).GetSetterType(memberName);
				}
				memberInfo = ReflectionInfo.GetInstance(parentType).GetSetter(memberName);
			} 
			else 
			{
				memberInfo = ReflectionInfo.GetInstance(type).GetSetter(memberName);
			}

			return memberInfo;
		}
        /// <summary>
        /// Takes the where condition provided in the mapping attribute and iterpolates the alias.
        /// </summary>
        /// <param name="whereSql">The "where" sql statement from the mapping attribute.</param>
        /// <param name="dialect">The <see cref="Dialect.Dialect"/> to help with rendering the Sql.</param>
        /// <returns>
        /// A well formed "where" sql statement for the <see cref="Dialect.Dialect"/>.
        /// </returns>
        public static string RenderWhereStringTemplate(string whereSql, Dialect.Dialect dialect)
        {
            //TODO: make this a bit nicer.

            StringTokenizer tokens = new StringTokenizer(whereSql, delimiters, true);

            StringBuilder result = new StringBuilder(whereSql.Length + 10);

            bool quoted         = false;
            bool afterFrom      = false;
            bool afterFromTable = false;

            IEnumerator tokensEnum = tokens.GetEnumerator();
            bool        hasMore    = tokensEnum.MoveNext();
            string      nextToken  = hasMore ? ( string )tokensEnum.Current : null;

            while (hasMore)
            {
                string token = nextToken;
                hasMore   = tokensEnum.MoveNext();
                nextToken = hasMore ? ( string )tokensEnum.Current : null;

                // the begin or end "'" has been found
                if ("'".Equals(token))
                {
                    quoted = !quoted;
                }

                if (quoted || char.IsWhiteSpace(token[0]))
                {
                    result.Append(token);
                }
                else
                {
                    bool isIdentifier = token[0] == '`' || (                   // allow any identifier quoted with backtick
                        Char.IsLetter(token[0]) &&                             // only recognizes identifiers beginning with a letter
                        !Keywords.Contains(token.ToLower(System.Globalization.CultureInfo.InvariantCulture)) &&
                        token.IndexOf('.') < 0
                        );

                    if (afterFrom)
                    {
                        result.Append(token);
                        afterFrom      = false;
                        afterFromTable = true;
                    }
                    else if (afterFromTable)
                    {
                        afterFromTable = false;
                        result.Append(token);
                    }
                    else if (isIdentifier && (nextToken == null || !nextToken.Equals("(")))                          // not a function call
                    {
                        result.Append(Placeholder)
                        .Append(StringHelper.Dot)
                        .Append(Quote(token, dialect));
                    }
                    else
                    {
                        if ("from".Equals(token.ToLower(System.Globalization.CultureInfo.InvariantCulture)))
                        {
                            afterFrom = true;
                        }
                        result.Append(token);
                    }
                }
            }

            return(result.ToString());
        }
        /// <summary>
        /// Parse Inline ParameterMap
        /// </summary>
        /// <param name="statement"></param>
        /// <param name="sqlStatement"></param>
        /// <returns>A new sql command text.</returns>
        /// <param name="scope"></param>
        public SqlText ParseInlineParameterMap(IScope scope, IStatement statement, string sqlStatement)
        {
            string    newSql             = sqlStatement;
            ArrayList mappingList        = new ArrayList();
            Type      parameterClassType = null;

            if (statement != null)
            {
                parameterClassType = statement.ParameterClass;
            }

            StringTokenizer parser       = new StringTokenizer(sqlStatement, PARAMETER_TOKEN, true);
            StringBuilder   newSqlBuffer = new StringBuilder();

            string token     = null;
            string lastToken = null;

            IEnumerator enumerator = parser.GetEnumerator();

            while (enumerator.MoveNext())
            {
                token = (string)enumerator.Current;

                if (PARAMETER_TOKEN.Equals(lastToken))
                {
                    if (PARAMETER_TOKEN.Equals(token))
                    {
                        newSqlBuffer.Append(PARAMETER_TOKEN);
                        token = null;
                    }
                    else
                    {
                        ParameterProperty mapping = null;
                        if (token.IndexOf(PARAM_DELIM) > -1)
                        {
                            mapping = OldParseMapping(token, parameterClassType, scope);
                        }
                        else
                        {
                            mapping = NewParseMapping(token, parameterClassType, scope);
                        }

                        mappingList.Add(mapping);
                        newSqlBuffer.Append("? ");

                        enumerator.MoveNext();
                        token = (string)enumerator.Current;
                        if (!PARAMETER_TOKEN.Equals(token))
                        {
                            throw new DataMapperException("Unterminated inline parameter in mapped statement (" + statement.Id + ").");
                        }
                        token = null;
                    }
                }
                else
                {
                    if (!PARAMETER_TOKEN.Equals(token))
                    {
                        newSqlBuffer.Append(token);
                    }
                }

                lastToken = token;
            }

            newSql = newSqlBuffer.ToString();

            ParameterProperty[] mappingArray = (ParameterProperty[])mappingList.ToArray(typeof(ParameterProperty));

            SqlText sqlText = new SqlText();

            sqlText.Text       = newSql;
            sqlText.Parameters = mappingArray;

            return(sqlText);
        }
        /// <summary>
        /// Parse inline parameter with syntax as
        /// #propertyName,type=string,dbype=Varchar,direction=Input,nullValue=N/A,handler=string#
        /// </summary>
        /// <param name="token"></param>
        /// <param name="parameterClassType"></param>
        /// <param name="scope"></param>
        /// <returns></returns>
        private ParameterProperty NewParseMapping(string token, Type parameterClassType, IScope scope)
        {
            ParameterProperty mapping = null;

            string propertyName = string.Empty;
            string type         = string.Empty;
            string dbType       = string.Empty;
            string direction    = string.Empty;
            string callBack     = string.Empty;
            string nullValue    = string.Empty;

            StringTokenizer paramParser     = new StringTokenizer(token, "=,", false);
            IEnumerator     enumeratorParam = paramParser.GetEnumerator();

            enumeratorParam.MoveNext();

            propertyName = ((string)enumeratorParam.Current).Trim();

            while (enumeratorParam.MoveNext())
            {
                string field = (string)enumeratorParam.Current;
                if (enumeratorParam.MoveNext())
                {
                    string value = (string)enumeratorParam.Current;
                    if ("type".Equals(field))
                    {
                        type = value;
                    }
                    else if ("dbType".Equals(field))
                    {
                        dbType = value;
                    }
                    else if ("direction".Equals(field))
                    {
                        direction = value;
                    }
                    else if ("nullValue".Equals(field))
                    {
                        nullValue = value;
                    }
                    else if ("handler".Equals(field))
                    {
                        callBack = value;
                    }
                    else
                    {
                        throw new DataMapperException("Unrecognized parameter mapping field: '" + field + "' in " + token);
                    }
                }
                else
                {
                    throw new DataMapperException("Incorrect inline parameter map format (missmatched name=value pairs): " + token);
                }
            }

            //if (mapping.CallBackName.Length >0)
            //{
            //    mapping.Initialize( scope, parameterClassType );
            //}
            //else
            //{
            //    ITypeHandler handler = null;
            //    if (parameterClassType == null)
            //    {
            //        handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
            //    }
            //    else
            //    {
            //        handler = ResolveTypeHandler( scope.DataExchangeFactory.TypeHandlerFactory,
            //            parameterClassType, mapping.PropertyName,
            //            mapping.CLRType, mapping.DbType );
            //    }
            //    mapping.TypeHandler = handler;
            //    mapping.Initialize(  scope, parameterClassType );
            //}

            return(new ParameterProperty(
                       propertyName,
                       string.Empty,
                       callBack,
                       type,
                       dbType,
                       direction,
                       nullValue,
                       0,
                       0,
                       -1,
                       parameterClassType,
                       scope.DataExchangeFactory));
        }
Exemple #29
0
        private IActor ResolveArgument(IActor resolvedActor, String expression, int index, IHandlerContext handlerContext)
        {
            String argument = null;

            log.Debug("resolving actor expression '" + expression + "',  resolvedActor is " + resolvedActor);
            String whiteSpace = "                                                                                      ".Substring(0, index);

            log.Debug("                            " + whiteSpace + "^");

            String[] parameters = null;

            int argumentEndIndex = expression.IndexOf("->", index);

            if (argumentEndIndex == -1)
            {
                argumentEndIndex = expression.Length;
            }

            int parametersStartIndex = expression.IndexOf("(", index);
            int parametersEndIndex   = -1;

            if ((parametersStartIndex != -1) && (parametersStartIndex < argumentEndIndex))
            {
                argument           = expression.Substring(index, (parametersStartIndex) - (index)).Trim();
                parametersEndIndex = expression.IndexOf(")", parametersStartIndex + 1);

                if (parametersEndIndex > argumentEndIndex)
                {
                    throw new SystemException("can't resolve assigner expression : couldn't find closing bracket for bracket on index '" + parametersStartIndex + "' in expression '" + expression + "'");
                }

                // the next exception happens when a parameter contains a right bracket.
                String shouldBewhiteSpace = expression.Substring(parametersEndIndex + 1, (argumentEndIndex) - (parametersEndIndex + 1));
                if (!"".Equals(shouldBewhiteSpace.Trim()))
                {
                    throw new SystemException("can't resolve assigner expression : only whitespace allowed between closing bracket of the parameterlist of an argument and the end of the argument : closing bracket position '" + parametersEndIndex + "' in expression '" + expression + "'");
                }

                String    parametersText = expression.Substring(parametersStartIndex + 1, (parametersEndIndex) - (parametersStartIndex + 1));
                ArrayList parameterList  = new ArrayList();

                StringTokenizer tokenizer = new StringTokenizer(parametersText, ",");
                IEnumerator     tokenEnum = tokenizer.GetEnumerator();
                while (tokenEnum.MoveNext())
                {
                    parameterList.Add(tokenEnum.Current.ToString().Trim());
                }

                if (parameterList.Count > 0)
                {
                    parameters = new String[parameterList.Count];
                    parameters = (String[])parameterList.ToArray(typeof(String));
                }
                else
                {
                    parameters = new String[0];
                }
            }
            else
            {
                argument   = expression.Substring(index, (argumentEndIndex) - (index)).Trim();
                parameters = new String[0];
            }

            if ("".Equals(argument))
            {
                throw new SystemException("can't resolve assigner expression : can't resolve empty argument on index '" + index + "' for expression '" + expression + "'");
            }

            String methodName = "ResolveArgument" + argument.Substring(0, 1).ToUpper() + argument.Substring(1);

            try
            {
                MethodInfo method = this.GetType().GetMethod(methodName, (Type[])RESOLVE_METHOD_ARGUMENT_TYPES);
                Object[]   args   = new Object[] { resolvedActor, parameters, handlerContext };

                resolvedActor = (IActor)method.Invoke(this, (Object[])args);
                log.Debug(methodName + " came up with " + resolvedActor);
            }
            catch (Exception t)
            {
                throw new SystemException("can't resolve assigner expression : couldn't resolve argument '" + argument + "' : " + t.Message, t);
            }


            if (argumentEndIndex != expression.Length)
            {
                if (argumentEndIndex < expression.Length)
                {
                    argumentEndIndex = expression.IndexOf("->", argumentEndIndex) + 2;
                }
                resolvedActor = ResolveArgument(resolvedActor, expression, argumentEndIndex, handlerContext);
            }

            return(resolvedActor);
        }
		/// <summary>
		/// Parse Inline ParameterMap
		/// </summary>
		/// <param name="statement"></param>
		/// <param name="sqlStatement"></param>
		/// <returns>A new sql command text.</returns>
		/// <param name="scope"></param>
		public SqlText ParseInlineParameterMap(IScope scope, IStatement statement, string sqlStatement)
		{
			string newSql = sqlStatement;
			ArrayList mappingList = new ArrayList();
			Type parameterClassType = null;

			if (statement != null)
			{
				parameterClassType = statement.ParameterClass;
			}

			StringTokenizer parser = new StringTokenizer(sqlStatement, PARAMETER_TOKEN, true);
			StringBuilder newSqlBuffer = new StringBuilder();

			string token = null;
			string lastToken = null;

			IEnumerator enumerator = parser.GetEnumerator();

			while (enumerator.MoveNext()) 
			{
				token = (string)enumerator.Current;

				if (PARAMETER_TOKEN.Equals(lastToken)) 
				{
					if (PARAMETER_TOKEN.Equals(token)) 
					{
						newSqlBuffer.Append(PARAMETER_TOKEN);
						token = null;
					} 
					else 
					{
						ParameterProperty mapping = null; 
						if (token.IndexOf(PARAM_DELIM) > -1) 
						{
							mapping =  OldParseMapping(token, parameterClassType, scope);
						} 
						else 
						{
							mapping = NewParseMapping(token, parameterClassType, scope);
						}															 

						mappingList.Add(mapping);
						newSqlBuffer.Append("? ");

						enumerator.MoveNext();
						token = (string)enumerator.Current;
						if (!PARAMETER_TOKEN.Equals(token)) 
						{
							throw new DataMapperException("Unterminated inline parameter in mapped statement (" + statement.Id + ").");
						}
						token = null;
					}
				} 
				else 
				{
					if (!PARAMETER_TOKEN.Equals(token)) 
					{
						newSqlBuffer.Append(token);
					}
				}

				lastToken = token;
			}

			newSql = newSqlBuffer.ToString();

			ParameterProperty[] mappingArray = (ParameterProperty[]) mappingList.ToArray(typeof(ParameterProperty));

			SqlText sqlText = new SqlText();
			sqlText.Text = newSql;
			sqlText.Parameters = mappingArray;

			return sqlText;
		}
		/// <summary>
		/// Parse inline parameter with syntax as
		/// #propertyName:dbType:nullValue#
		/// </summary>
		/// <param name="token"></param>
		/// <param name="parameterClassType"></param>
		/// <param name="scope"></param>
		/// <returns></returns>
		private ParameterProperty OldParseMapping(string token, Type parameterClassType, IScope scope) 
		{
			ParameterProperty mapping = null;
            string propertyName = string.Empty;
            string dbType = string.Empty;
            string nullValue = string.Empty;

			if (token.IndexOf(PARAM_DELIM) > -1) 
			{
				StringTokenizer paramParser = new StringTokenizer(token, PARAM_DELIM, true);
				IEnumerator enumeratorParam = paramParser.GetEnumerator();

				int n1 = paramParser.TokenNumber;
				if (n1 == 3) 
				{
					enumeratorParam.MoveNext();
					propertyName = ((string)enumeratorParam.Current).Trim();

					enumeratorParam.MoveNext();
					enumeratorParam.MoveNext(); //ignore ":"
                    dbType = ((string)enumeratorParam.Current).Trim();

                    //ITypeHandler handler = null;
                    //if (parameterClassType == null) 
                    //{
                    //    handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                    //} 
                    //else 
                    //{
                    //    handler = ResolveTypeHandler(scope.DataExchangeFactory.TypeHandlerFactory, parameterClassType, propertyName, null, dBType);
                    //}
                    //mapping.TypeHandler = handler;
                    //mapping.Initialize( scope, parameterClassType );
				} 
				else if (n1 >= 5) 
				{
					enumeratorParam.MoveNext();
					propertyName = ((string)enumeratorParam.Current).Trim();

					enumeratorParam.MoveNext();
					enumeratorParam.MoveNext(); //ignore ":"
                    dbType = ((string)enumeratorParam.Current).Trim();

					enumeratorParam.MoveNext();
					enumeratorParam.MoveNext(); //ignore ":"
					nullValue = ((string)enumeratorParam.Current).Trim();

					while (enumeratorParam.MoveNext()) 
					{
						nullValue = nullValue + ((string)enumeratorParam.Current).Trim();
					}

                    //ITypeHandler handler = null;
                    //if (parameterClassType == null) 
                    //{
                    //    handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                    //} 
                    //else 
                    //{
                    //    handler = ResolveTypeHandler(scope.DataExchangeFactory.TypeHandlerFactory, parameterClassType, propertyName, null, dBType);
                    //}
                    //mapping.TypeHandler = handler;
                    //mapping.Initialize( scope, parameterClassType );
				} 
				else 
				{
					throw new ConfigurationException("Incorrect inline parameter map format: " + token);
				}
			} 
			else 
			{
				propertyName = token;
                //ITypeHandler handler = null;
                //if (parameterClassType == null) 
                //{
                //    handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                //} 
                //else 
                //{
                //    handler = ResolveTypeHandler(scope.DataExchangeFactory.TypeHandlerFactory, parameterClassType, token, null, null);
                //}
                //mapping.TypeHandler = handler;
                //mapping.Initialize( scope, parameterClassType );


			}

            return new ParameterProperty(
                propertyName,
                string.Empty,
                string.Empty,
                string.Empty,
                dbType,
                string.Empty,
                nullValue,
                0,
                0,
                -1,
                parameterClassType,
                scope.DataExchangeFactory);
		}
		/// <summary>
		/// Parse inline parameter with syntax as
		/// #propertyName,type=string,dbype=Varchar,direction=Input,nullValue=N/A,handler=string#
		/// </summary>
		/// <param name="token"></param>
		/// <param name="parameterClassType"></param>
		/// <param name="scope"></param>
		/// <returns></returns>
		private ParameterProperty NewParseMapping(string token, Type parameterClassType, IScope scope) 
		{
			ParameterProperty mapping = null;

            string propertyName = string.Empty;
            string type = string.Empty;
            string dbType = string.Empty;
            string direction = string.Empty;
            string callBack = string.Empty;
            string nullValue = string.Empty;

			StringTokenizer paramParser = new StringTokenizer(token, "=,", false);
			IEnumerator enumeratorParam = paramParser.GetEnumerator();
			enumeratorParam.MoveNext();

            propertyName = ((string)enumeratorParam.Current).Trim();

			while (enumeratorParam.MoveNext()) 
			{
				string field = (string)enumeratorParam.Current;
				if (enumeratorParam.MoveNext()) 
				{
					string value = (string)enumeratorParam.Current;
					if ("type".Equals(field)) 
					{
                        type = value;
					} 
					else if ("dbType".Equals(field)) 
					{
                        dbType = value;
					} 
					else if ("direction".Equals(field)) 
					{
                        direction = value;
					} 
					else if ("nullValue".Equals(field)) 
					{
                        nullValue = value;
					} 
					else if ("handler".Equals(field)) 
					{
                        callBack = value;
					} 
					else 
					{
						throw new DataMapperException("Unrecognized parameter mapping field: '" + field + "' in " + token);
					}
				} 
				else 
				{
					throw new DataMapperException("Incorrect inline parameter map format (missmatched name=value pairs): " + token);
				}
			}

            //if (mapping.CallBackName.Length >0)
            //{
            //    mapping.Initialize( scope, parameterClassType );
            //}
            //else
            //{
            //    ITypeHandler handler = null;
            //    if (parameterClassType == null) 
            //    {
            //        handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
            //    } 
            //    else 
            //    {
            //        handler = ResolveTypeHandler( scope.DataExchangeFactory.TypeHandlerFactory, 
            //            parameterClassType, mapping.PropertyName,  
            //            mapping.CLRType, mapping.DbType );
            //    }
            //    mapping.TypeHandler = handler;
            //    mapping.Initialize(  scope, parameterClassType );				
            //}

            return new ParameterProperty(
                propertyName,
                string.Empty,
                callBack,
                type,
                dbType,
                direction,
                nullValue,
                0,
                0,
                -1,
                parameterClassType,
                scope.DataExchangeFactory);
		}
        /// <summary>
        ///
        /// </summary>
        /// <param name="parameterObject"></param>
        /// <returns></returns>
        private string ProcessDynamicElements(object parameterObject)
        {
            // define which character is seperating fields

            StringTokenizer parser = new StringTokenizer(_simpleSqlStatement, ELEMENT_TOKEN, true);

            StringBuilder newSql = new StringBuilder();

            string token     = null;
            string lastToken = null;

            IEnumerator enumerator = parser.GetEnumerator();

            while (enumerator.MoveNext())
            {
                token = ((string)enumerator.Current);

                if (ELEMENT_TOKEN.Equals(lastToken))
                {
                    if (ELEMENT_TOKEN.Equals(token))
                    {
                        newSql.Append(ELEMENT_TOKEN);
                        token = null;
                    }
                    else
                    {
                        object value = null;
                        if (parameterObject != null)
                        {
                            if (_dataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterObject.GetType()) == true)
                            {
                                value = parameterObject;
                            }
                            else
                            {
                                value = ObjectProbe.GetMemberValue(parameterObject, token, _dataExchangeFactory.AccessorFactory);
                            }
                        }
                        if (value != null)
                        {
                            newSql.Append(value.ToString());
                        }

                        enumerator.MoveNext();
                        token = ((string)enumerator.Current);

                        if (!ELEMENT_TOKEN.Equals(token))
                        {
                            throw new DataMapperException("Unterminated dynamic element in sql (" + _simpleSqlStatement + ").");
                        }
                        token = null;
                    }
                }
                else
                {
                    if (!ELEMENT_TOKEN.Equals(token))
                    {
                        newSql.Append(token);
                    }
                }

                lastToken = token;
            }

            return(newSql.ToString());
        }
        public static string RenderOrderByStringTemplate(string sqlOrderByString, Dialect.Dialect dialect,
                                                         SQLFunctionRegistry functionRegistry)
        {
            //TODO: make this a bit nicer
            string symbols = new StringBuilder()
                             .Append("=><!+-*/()',|&`")
                             .Append(ParserHelper.Whitespace)
                             .Append(dialect.OpenQuote)
                             .Append(dialect.CloseQuote)
                             .ToString();
            StringTokenizer tokens = new StringTokenizer(sqlOrderByString, symbols, true);

            StringBuilder result           = new StringBuilder();
            bool          quoted           = false;
            bool          quotedIdentifier = false;

            using (var tokensEnum = tokens.GetEnumerator())
            {
                var hasMore   = tokensEnum.MoveNext();
                var nextToken = hasMore ? tokensEnum.Current : null;
                while (hasMore)
                {
                    var token   = nextToken;
                    var lcToken = token.ToLowerInvariant();
                    hasMore   = tokensEnum.MoveNext();
                    nextToken = hasMore ? tokensEnum.Current : null;

                    var isQuoteCharacter = false;

                    if (!quotedIdentifier && "'".Equals(token))
                    {
                        quoted           = !quoted;
                        isQuoteCharacter = true;
                    }

                    if (!quoted)
                    {
                        bool isOpenQuote;
                        if ("`".Equals(token))
                        {
                            isOpenQuote      = !quotedIdentifier;
                            token            = lcToken = isOpenQuote ? dialect.OpenQuote.ToString() : dialect.CloseQuote.ToString();
                            quotedIdentifier = isOpenQuote;
                            isQuoteCharacter = true;
                        }
                        else if (!quotedIdentifier && (dialect.OpenQuote == token[0]))
                        {
                            isOpenQuote      = true;
                            quotedIdentifier = true;
                            isQuoteCharacter = true;
                        }
                        else if (quotedIdentifier && (dialect.CloseQuote == token[0]))
                        {
                            quotedIdentifier = false;
                            isQuoteCharacter = true;
                            isOpenQuote      = false;
                        }
                        else
                        {
                            isOpenQuote = false;
                        }

                        if (isOpenQuote)
                        {
                            result.Append(Placeholder).Append('.');
                        }
                    }

                    var quotedOrWhitespace = quoted ||
                                             quotedIdentifier ||
                                             isQuoteCharacter ||
                                             char.IsWhiteSpace(token[0]);

                    if (quotedOrWhitespace)
                    {
                        result.Append(token);
                    }
                    else if (
                        IsIdentifier(token, dialect) &&
                        !IsFunctionOrKeyword(lcToken, nextToken, dialect, functionRegistry)
                        )
                    {
                        result.Append(Placeholder)
                        .Append('.')
                        .Append(token);
                    }
                    else
                    {
                        result.Append(token);
                    }
                }
            }
            return(result.ToString());
        }
		/// <summary>
		/// Parse sql command text.
		/// </summary>
		private void EvaluateParameterMap()
		{
			string delimiter = "?";
			string token = null;
			int index = 0;
			string sqlParamName = string.Empty;			
			StringTokenizer parser = new StringTokenizer(_commandText, delimiter, true);
			StringBuilder newCommandTextBuffer = new StringBuilder();

			IEnumerator enumerator = parser.GetEnumerator();

			while (enumerator.MoveNext()) 
			{
				token = (string)enumerator.Current;

				if (delimiter.Equals(token)) // ?
				{
					ParameterProperty property = _request.ParameterMap.Properties[index];
					IDataParameter dataParameter = null;
					
					if (_session.DataSource.DbProvider.UsePositionalParameters)
					{
						// TODO Refactor?
						if (_parameterPrefix.Equals(":"))
						{
							// ODP.NET uses positional parameters by default
							// but uses ":0" or ":1" instead of "?"
							sqlParamName = ":" + index;	
						}
						else 
						{
							// OLEDB/OBDC doesn't support named parameters !!!
							sqlParamName = "?";
						}
						
					}
					else
					{
						dataParameter = (IDataParameter) _propertyDbParameterMap[property];
						
						// 5 May 2004
						// Need to check UseParameterPrefixInParameter here 
						// since CreateParametersForStatementText now does
						// a check for UseParameterPrefixInParameter before 
						// creating the parameter name!
						if (_session.DataSource.DbProvider.UseParameterPrefixInParameter) 
						{
							// Fix ByteFX.Data.MySqlClient.MySqlParameter
							// who strip prefix in Parameter Name ?!
							if (_session.DataSource.DbProvider.Id.IndexOf("ByteFx")>=0)
							{
								sqlParamName = _parameterPrefix+dataParameter.ParameterName;
							}
							else
							{
								sqlParamName = dataParameter.ParameterName;
							}
						}
						else
						{
							sqlParamName = _parameterPrefix+dataParameter.ParameterName;
						}
					}			
		
					newCommandTextBuffer.Append(" ");
					newCommandTextBuffer.Append(sqlParamName);

					sqlParamName = string.Empty;
					index ++;
				}
				else
				{
					newCommandTextBuffer.Append(token);
				}
			}

			_preparedStatement.PreparedSql = newCommandTextBuffer.ToString();
		}
        public static string RenderWhereStringTemplate(string sqlWhereString, string placeholder, Dialect.Dialect dialect,
                                                       SQLFunctionRegistry functionRegistry)
        {
            //TODO: make this a bit nicer
            string symbols = new StringBuilder()
                             .Append("=><!+-*/()',|&`")
                             .Append(ParserHelper.Whitespace)
                             .Append(dialect.OpenQuote)
                             .Append(dialect.CloseQuote)
                             .ToString();
            StringTokenizer tokens = new StringTokenizer(sqlWhereString, symbols, true);

            StringBuilder result           = new StringBuilder();
            bool          quoted           = false;
            bool          quotedIdentifier = false;
            bool          beforeTable      = false;
            bool          inFromClause     = false;
            bool          afterFromTable   = false;

            using (var tokensEnum = tokens.GetEnumerator())
            {
                var hasMore   = tokensEnum.MoveNext();
                var nextToken = hasMore ? tokensEnum.Current : null;
                var lastToken = string.Empty;
                while (hasMore)
                {
                    var token   = nextToken;
                    var lcToken = token.ToLowerInvariant();
                    hasMore   = tokensEnum.MoveNext();
                    nextToken = hasMore ? tokensEnum.Current : null;

                    var isQuoteCharacter = false;

                    if (!quotedIdentifier && "'".Equals(token))
                    {
                        quoted           = !quoted;
                        isQuoteCharacter = true;
                    }

                    if (!quoted)
                    {
                        bool isOpenQuote;
                        if ("`".Equals(token))
                        {
                            isOpenQuote      = !quotedIdentifier;
                            token            = lcToken = isOpenQuote ? dialect.OpenQuote.ToString() : dialect.CloseQuote.ToString();
                            quotedIdentifier = isOpenQuote;
                            isQuoteCharacter = true;
                        }
                        else if (!quotedIdentifier && (dialect.OpenQuote == token[0]))
                        {
                            isOpenQuote      = true;
                            quotedIdentifier = true;
                            isQuoteCharacter = true;
                        }
                        else if (quotedIdentifier && (dialect.CloseQuote == token[0]))
                        {
                            quotedIdentifier = false;
                            isQuoteCharacter = true;
                            isOpenQuote      = false;
                        }
                        else
                        {
                            isOpenQuote = false;
                        }

                        if (isOpenQuote && !inFromClause && !lastToken.EndsWith("."))
                        {
                            result.Append(placeholder).Append('.');
                        }
                    }

                    var quotedOrWhitespace = quoted ||
                                             quotedIdentifier ||
                                             isQuoteCharacter ||
                                             char.IsWhiteSpace(token[0]);

                    if (quotedOrWhitespace)
                    {
                        result.Append(token);
                    }
                    else if (beforeTable)
                    {
                        result.Append(token);
                        beforeTable    = false;
                        afterFromTable = true;
                    }
                    else if (afterFromTable)
                    {
                        if (!"as".Equals(lcToken))
                        {
                            afterFromTable = false;
                        }
                        result.Append(token);
                    }
                    else if (IsNamedParameter(token))
                    {
                        result.Append(token);
                    }
                    else if (
                        IsIdentifier(token, dialect) &&
                        !IsFunctionOrKeyword(lcToken, nextToken, dialect, functionRegistry)
                        )
                    {
                        result.Append(placeholder)
                        .Append('.')
                        .Append(token);
                    }
                    else
                    {
                        if (BeforeTableKeywords.Contains(lcToken))
                        {
                            beforeTable  = true;
                            inFromClause = true;
                        }
                        else if (inFromClause && ",".Equals(lcToken))
                        {
                            beforeTable = true;
                        }
                        result.Append(token);
                    }

                    if (                              //Yuck:
                        inFromClause &&
                        Keywords.Contains(lcToken) && //"as" is not in Keywords
                        !BeforeTableKeywords.Contains(lcToken)
                        )
                    {
                        inFromClause = false;
                    }
                    lastToken = token;
                }
            }
            return(result.ToString());
        }
Exemple #37
0
		/// <summary>
		///  Returns the type that the get expects to receive as a parameter when
		///  setting a member value.
		/// </summary>
		/// <param name="obj">The object to check</param>
		/// <param name="memberName">The name of the member</param>
		/// <returns>The type of the member</returns>
		public static Type GetMemberTypeForGetter(object obj, string memberName) 
		{
			Type type = obj.GetType();

			if (obj is IDictionary) 
			{
				IDictionary map = (IDictionary) obj;
				object value = map[memberName];
				if (value == null) 
				{
					type = typeof(object);
				} 
				else 
				{
					type = value.GetType();
				}
			} 
			else 
			{
				if (memberName.IndexOf('.') > -1) 
				{
					StringTokenizer parser = new StringTokenizer(memberName, ".");
					IEnumerator enumerator = parser.GetEnumerator();

					while (enumerator.MoveNext()) 
					{
						memberName = (string)enumerator.Current;
						type = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
					}
				} 
				else 
				{
					type = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
				}
			}

			return type;
		}
        /// <summary>
        /// Parse inline parameter with syntax as
        /// #propertyName:dbType:nullValue#
        /// </summary>
        /// <param name="token"></param>
        /// <param name="parameterClassType"></param>
        /// <param name="scope"></param>
        /// <returns></returns>
        private ParameterProperty OldParseMapping(string token, Type parameterClassType, IScope scope)
        {
            ParameterProperty mapping      = null;
            string            propertyName = string.Empty;
            string            dbType       = string.Empty;
            string            nullValue    = string.Empty;

            if (token.IndexOf(PARAM_DELIM) > -1)
            {
                StringTokenizer paramParser     = new StringTokenizer(token, PARAM_DELIM, true);
                IEnumerator     enumeratorParam = paramParser.GetEnumerator();

                int n1 = paramParser.TokenNumber;
                if (n1 == 3)
                {
                    enumeratorParam.MoveNext();
                    propertyName = ((string)enumeratorParam.Current).Trim();

                    enumeratorParam.MoveNext();
                    enumeratorParam.MoveNext();                     //ignore ":"
                    dbType = ((string)enumeratorParam.Current).Trim();

                    //ITypeHandler handler = null;
                    //if (parameterClassType == null)
                    //{
                    //    handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                    //}
                    //else
                    //{
                    //    handler = ResolveTypeHandler(scope.DataExchangeFactory.TypeHandlerFactory, parameterClassType, propertyName, null, dBType);
                    //}
                    //mapping.TypeHandler = handler;
                    //mapping.Initialize( scope, parameterClassType );
                }
                else if (n1 >= 5)
                {
                    enumeratorParam.MoveNext();
                    propertyName = ((string)enumeratorParam.Current).Trim();

                    enumeratorParam.MoveNext();
                    enumeratorParam.MoveNext();                     //ignore ":"
                    dbType = ((string)enumeratorParam.Current).Trim();

                    enumeratorParam.MoveNext();
                    enumeratorParam.MoveNext();                     //ignore ":"
                    nullValue = ((string)enumeratorParam.Current).Trim();

                    while (enumeratorParam.MoveNext())
                    {
                        nullValue = nullValue + ((string)enumeratorParam.Current).Trim();
                    }

                    //ITypeHandler handler = null;
                    //if (parameterClassType == null)
                    //{
                    //    handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                    //}
                    //else
                    //{
                    //    handler = ResolveTypeHandler(scope.DataExchangeFactory.TypeHandlerFactory, parameterClassType, propertyName, null, dBType);
                    //}
                    //mapping.TypeHandler = handler;
                    //mapping.Initialize( scope, parameterClassType );
                }
                else
                {
                    throw new ConfigurationException("Incorrect inline parameter map format: " + token);
                }
            }
            else
            {
                propertyName = token;
                //ITypeHandler handler = null;
                //if (parameterClassType == null)
                //{
                //    handler = scope.DataExchangeFactory.TypeHandlerFactory.GetUnkownTypeHandler();
                //}
                //else
                //{
                //    handler = ResolveTypeHandler(scope.DataExchangeFactory.TypeHandlerFactory, parameterClassType, token, null, null);
                //}
                //mapping.TypeHandler = handler;
                //mapping.Initialize( scope, parameterClassType );
            }

            return(new ParameterProperty(
                       propertyName,
                       string.Empty,
                       string.Empty,
                       string.Empty,
                       dbType,
                       string.Empty,
                       nullValue,
                       0,
                       0,
                       -1,
                       parameterClassType,
                       scope.DataExchangeFactory));
        }
Exemple #39
0
		/// <summary>
		///  Returns the type that the get expects to receive as a parameter when
		///  setting a member value.
		/// </summary>
		/// <param name="type">The type to check</param>
		/// <param name="memberName">The name of the member</param>
		/// <returns>The type of the member</returns>
		public static Type GetMemberTypeForGetter(Type type, string memberName) 
		{
			if (memberName.IndexOf('.') > -1) 
			{
				StringTokenizer parser = new StringTokenizer(memberName, ".");
				IEnumerator enumerator = parser.GetEnumerator();

				while (enumerator.MoveNext()) 
				{
					memberName = (string)enumerator.Current;
					type = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
				}
			} 
			else 
			{
				type = ReflectionInfo.GetInstance(type).GetGetterType(memberName);
			}

			return type;
		}
        /// <summary>
        /// Parse sql command text.
        /// </summary>
        private void EvaluateParameterMap()
        {
            string          delimiter            = "?";
            string          token                = null;
            int             index                = 0;
            string          sqlParamName         = string.Empty;
            StringTokenizer parser               = new StringTokenizer(_commandText, delimiter, true);
            StringBuilder   newCommandTextBuffer = new StringBuilder();

            IEnumerator enumerator = parser.GetEnumerator();

            while (enumerator.MoveNext())
            {
                token = (string)enumerator.Current;

                if (delimiter.Equals(token))                 // ?
                {
                    ParameterProperty property      = _request.ParameterMap.Properties[index];
                    IDataParameter    dataParameter = null;

                    if (_session.DataSource.DbProvider.UsePositionalParameters)
                    {
                        // TODO Refactor?
                        if (_parameterPrefix.Equals(":"))
                        {
                            // ODP.NET uses positional parameters by default
                            // but uses ":0" or ":1" instead of "?"
                            sqlParamName = ":" + index;
                        }
                        else
                        {
                            // OLEDB/OBDC doesn't support named parameters !!!
                            sqlParamName = "?";
                        }
                    }
                    else
                    {
                        dataParameter = (IDataParameter)_propertyDbParameterMap[property];

                        // 5 May 2004
                        // Need to check UseParameterPrefixInParameter here
                        // since CreateParametersForStatementText now does
                        // a check for UseParameterPrefixInParameter before
                        // creating the parameter name!
                        if (_session.DataSource.DbProvider.UseParameterPrefixInParameter)
                        {
                            // Fix ByteFX.Data.MySqlClient.MySqlParameter
                            // who strip prefix in Parameter Name ?!
                            if (_session.DataSource.DbProvider.Name.IndexOf("ByteFx") >= 0)
                            {
                                sqlParamName = _parameterPrefix + dataParameter.ParameterName;
                            }
                            else
                            {
                                sqlParamName = dataParameter.ParameterName;
                            }
                        }
                        else
                        {
                            sqlParamName = _parameterPrefix + dataParameter.ParameterName;
                        }
                    }

                    newCommandTextBuffer.Append(" ");
                    newCommandTextBuffer.Append(sqlParamName);

                    sqlParamName = string.Empty;
                    index++;
                }
                else
                {
                    newCommandTextBuffer.Append(token);
                }
            }

            _preparedStatement.PreparedSql = newCommandTextBuffer.ToString();
        }
		/// <summary>
		/// 
		/// </summary>
		/// <param name="parameterObject"></param>
		/// <returns></returns>
		private string ProcessDynamicElements(object parameterObject) 
		{
			// define which character is seperating fields

			StringTokenizer parser = new StringTokenizer(_simpleSqlStatement, ELEMENT_TOKEN, true);

			StringBuilder newSql = new StringBuilder();

			string token = null;
			string lastToken = null;
			
			IEnumerator enumerator = parser.GetEnumerator();

			while (enumerator.MoveNext()) 
			{
				token = ((string)enumerator.Current);

				if (ELEMENT_TOKEN.Equals(lastToken)) 
				{
					if (ELEMENT_TOKEN.Equals(token)) 
					{
						newSql.Append(ELEMENT_TOKEN);
						token = null;
					} 
					else 
					{
						object value = null;
						if (parameterObject != null) 
						{
							if ( _dataExchangeFactory.TypeHandlerFactory.IsSimpleType( parameterObject.GetType() ) == true) 
							{
								value = parameterObject;
							} 
							else 
							{
                                value = ObjectProbe.GetMemberValue(parameterObject, token, _dataExchangeFactory.AccessorFactory);
							}
						}
						if (value != null) 
						{
							newSql.Append(value.ToString());
						}

						enumerator.MoveNext();
						token = ((string)enumerator.Current);

						if (!ELEMENT_TOKEN.Equals(token)) 
						{
							throw new DataMapperException("Unterminated dynamic element in sql (" + _simpleSqlStatement + ").");
						}
						token = null;
					}
				} 
				else 
				{
					if (!ELEMENT_TOKEN.Equals(token)) 
					{
						newSql.Append(token);
					}
				}

				lastToken = token;
			}

			return newSql.ToString();
		}