/// <summary>
        /// Convenience method for creating a param location recognizer and
        /// initiating the parse.
        /// </summary>
        /// <param name="query">The query to be parsed for parameter locations. </param>
        /// <returns> The generated recognizer, with journaled location info. </returns>
        public static ParamLocationRecognizer ParseLocations(string query)
        {
            var recognizer = new ParamLocationRecognizer();

            ParameterParser.Parse(query, recognizer);
            return(recognizer);
        }
		public void CanFindParameterAfterComment()
		{
			string query =
	@"
SELECT id 
FROM tablea 
/* Comment with ' number 2 */ 
WHERE Name = :name 
ORDER BY Name";

			var recognizer = new ParamLocationRecognizer();
			ParameterParser.Parse(query, recognizer);
			ParamLocationRecognizer.NamedParameterDescription p;
			Assert.DoesNotThrow(() => p = recognizer.NamedParameterDescriptionMap["name"]);
		}
Beispiel #3
0
        private static ParameterMetadata BuildParameterMetadata(IParameterTranslations parameterTranslations, string hql)
        {
            long start = DateTime.Now.Ticks;
            ParamLocationRecognizer recognizer = ParamLocationRecognizer.ParseLocations(hql);
            long end = DateTime.Now.Ticks;

            if (log.IsDebugEnabled)
            {
                log.Debug("HQL param location recognition took " + (end - start) + " mills (" + hql + ")");
            }

            int ordinalParamCount = parameterTranslations.OrdinalParameterCount;

            int[] locations = recognizer.OrdinalParameterLocationList.ToArray();
            if (parameterTranslations.SupportsOrdinalParameterMetadata && locations.Length != ordinalParamCount)
            {
                throw new HibernateException("ordinal parameter mismatch");
            }
            ordinalParamCount = locations.Length;
            OrdinalParameterDescriptor[] ordinalParamDescriptors = new OrdinalParameterDescriptor[ordinalParamCount];
            for (int i = 1; i <= ordinalParamCount; i++)
            {
                ordinalParamDescriptors[i - 1] =
                    new OrdinalParameterDescriptor(i,
                                                   parameterTranslations.SupportsOrdinalParameterMetadata
                                                                        ? parameterTranslations.GetOrdinalParameterExpectedType(i)
                                                                        : null, locations[i - 1]);
            }

            Dictionary <string, NamedParameterDescriptor> namedParamDescriptorMap = new Dictionary <string, NamedParameterDescriptor>();

            foreach (KeyValuePair <string, ParamLocationRecognizer.NamedParameterDescription> entry in recognizer.NamedParameterDescriptionMap)
            {
                string name = entry.Key;
                ParamLocationRecognizer.NamedParameterDescription description = entry.Value;
                namedParamDescriptorMap[name] =
                    new NamedParameterDescriptor(name, parameterTranslations.GetNamedParameterExpectedType(name),
                                                 description.BuildPositionsArray(), description.JpaStyle);
            }
            return(new ParameterMetadata(ordinalParamDescriptors, namedParamDescriptorMap));
        }
        private ParameterMetadata BuildNativeSQLParameterMetadata(string sqlString)
        {
            ParamLocationRecognizer recognizer = ParamLocationRecognizer.ParseLocations(sqlString);

            var ordinalDescriptors = new OrdinalParameterDescriptor[recognizer.OrdinalParameterLocationList.Count];

            for (int i = 0; i < recognizer.OrdinalParameterLocationList.Count; i++)
            {
                int position = recognizer.OrdinalParameterLocationList[i];
                ordinalDescriptors[i] = new OrdinalParameterDescriptor(i, null);
            }

            IDictionary <string, NamedParameterDescriptor> namedParamDescriptorMap = new Dictionary <string, NamedParameterDescriptor>();

            foreach (KeyValuePair <string, ParamLocationRecognizer.NamedParameterDescription> entry in recognizer.NamedParameterDescriptionMap)
            {
                string name = entry.Key;
                ParamLocationRecognizer.NamedParameterDescription description = entry.Value;
                namedParamDescriptorMap[name] =
                    new NamedParameterDescriptor(name, null, description.JpaStyle);
            }

            return(new ParameterMetadata(ordinalDescriptors, namedParamDescriptorMap));
        }
		/// <summary> 
		/// Convenience method for creating a param location recognizer and
		/// initiating the parse. 
		/// </summary>
		/// <param name="query">The query to be parsed for parameter locations. </param>
		/// <returns> The generated recognizer, with journaled location info. </returns>
		public static ParamLocationRecognizer parseLocations(string query)
		{
			ParamLocationRecognizer recognizer = new ParamLocationRecognizer();
			ParameterParser.Parse(query, recognizer);
			return recognizer;
		}