/// <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 }); }
/// <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)); } }
/// <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"); }
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"); }
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)); }
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"); }
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 + "%"); } }
/// <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); }
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); }
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(); }
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]); }
/// <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> /// 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); } }
/// <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; }
/// <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); }
/// <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)); }
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()); }
/// <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)); }
/// <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(); }