public virtual IQuery GetNamedQuery(string queryName)
 {
     using (new SessionIdLoggingContext(SessionId))
     {
         CheckAndUpdateSessionStatus();
         NamedQueryDefinition nqd = factory.GetNamedQuery(queryName);
         IQuery query;
         if (nqd != null)
         {
             string queryString = nqd.QueryString;
             query = new QueryImpl(queryString, nqd.FlushMode, this, GetHQLQueryPlan(queryString.ToQueryExpression(), false).ParameterMetadata);
             query.SetComment("named HQL query " + queryName);
         }
         else
         {
             NamedSQLQueryDefinition nsqlqd = factory.GetNamedSQLQuery(queryName);
             if (nsqlqd == null)
             {
                 throw new MappingException("Named query not known: " + queryName);
             }
             query = new SqlQueryImpl(nsqlqd, this,
                                      factory.QueryPlanCache.GetSQLParameterMetadata(nsqlqd.QueryString));
             query.SetComment("named native SQL query " + queryName);
             nqd = nsqlqd;
         }
         InitQuery(query, nqd);
         return(query);
     }
 }
 public virtual IQuery GetNamedSQLQuery(string name)
 {
     using (new SessionIdLoggingContext(SessionId))
     {
         CheckAndUpdateSessionStatus();
         NamedSQLQueryDefinition nsqlqd = factory.GetNamedSQLQuery(name);
         if (nsqlqd == null)
         {
             throw new MappingException("Named SQL query not known: " + name);
         }
         IQuery query = new SqlQueryImpl(nsqlqd, this,
                                         factory.QueryPlanCache.GetSQLParameterMetadata(nsqlqd.QueryString));
         query.SetComment("named native SQL query " + name);
         InitQuery(query, nsqlqd);
         return(query);
     }
 }
        public void AddSqlQuery(HbmSqlQuery querySchema)
        {
            mappings.AddSecondPass(delegate
            {
                string queryName    = querySchema.name;
                string queryText    = querySchema.GetText();
                bool cacheable      = querySchema.cacheable;
                string region       = querySchema.cacheregion;
                int timeout         = string.IsNullOrEmpty(querySchema.timeout) ? RowSelection.NoValue : int.Parse(querySchema.timeout);
                int fetchSize       = querySchema.fetchsizeSpecified ? querySchema.fetchsize : -1;
                bool readOnly       = querySchema.readonlySpecified ? querySchema.@readonly : false;
                string comment      = null;
                bool callable       = querySchema.callable;
                string resultSetRef = querySchema.resultsetref;

                FlushMode flushMode = FlushModeConverter.GetFlushMode(querySchema);
                CacheMode?cacheMode = (querySchema.cachemodeSpecified)
                                                                                                ? querySchema.cachemode.ToCacheMode()
                                                                                                : null;

                IDictionary <string, string> parameterTypes = new LinkedHashMap <string, string>();
                IList <string> synchronizedTables           = GetSynchronizedTables(querySchema);

                NamedSQLQueryDefinition namedQuery;

                if (string.IsNullOrEmpty(resultSetRef))
                {
                    ResultSetMappingDefinition definition =
                        new ResultSetMappingBinder(Mappings).Create(querySchema);

                    namedQuery = new NamedSQLQueryDefinition(queryText,
                                                             definition.GetQueryReturns(), synchronizedTables, cacheable, region, timeout,
                                                             fetchSize, flushMode, cacheMode, readOnly, comment, parameterTypes, callable);
                }
                else
                {
                    // TODO: check there is no actual definition elemnents when a ref is defined
                    namedQuery = new NamedSQLQueryDefinition(queryText,
                                                             resultSetRef, synchronizedTables, cacheable, region, timeout, fetchSize,
                                                             flushMode, cacheMode, readOnly, comment, parameterTypes, callable);
                }

                log.Debug("Named SQL query: {0} -> {1}", queryName, namedQuery.QueryString);
                mappings.AddSQLQuery(queryName, namedQuery);
            });
        }
Exemple #4
0
        /// <summary> Constructs a SQLQueryImpl given a sql query defined in the mappings. </summary>
        /// <param name="queryDef">The representation of the defined sql-query. </param>
        /// <param name="session">The session to which this SQLQueryImpl belongs. </param>
        /// <param name="parameterMetadata">Metadata about parameters found in the query. </param>
        internal SqlQueryImpl(NamedSQLQueryDefinition queryDef, ISessionImplementor session, ParameterMetadata parameterMetadata)
            : base(queryDef.QueryString, queryDef.FlushMode, session, parameterMetadata)
        {
            if (!string.IsNullOrEmpty(queryDef.ResultSetRef))
            {
                ResultSetMappingDefinition definition = session.Factory.GetResultSetMapping(queryDef.ResultSetRef);
                if (definition == null)
                {
                    throw new MappingException("Unable to find resultset-ref definition: " + queryDef.ResultSetRef);
                }
                queryReturns = new List <INativeSQLQueryReturn>(definition.GetQueryReturns());
            }
            else
            {
                queryReturns = new List <INativeSQLQueryReturn>(queryDef.QueryReturns);
            }

            querySpaces = queryDef.QuerySpaces;
            callable    = queryDef.IsCallable;
        }
Exemple #5
0
        private IDictionary <string, HibernateException> CheckNamedQueries()
        {
            IDictionary <string, HibernateException> errors = new Dictionary <string, HibernateException>();

            // Check named HQL queries
            log.Debug("Checking " + namedQueries.Count + " named HQL queries");
            foreach (var entry in namedQueries)
            {
                string queryName        = entry.Key;
                NamedQueryDefinition qd = entry.Value;
                // this will throw an error if there's something wrong.
                try
                {
                    log.Debug("Checking named query: " + queryName);
                    //TODO: BUG! this currently fails for named queries for non-POJO entities
                    queryPlanCache.GetHQLQueryPlan(qd.QueryString.ToQueryExpression(), false, new CollectionHelper.EmptyMapClass <string, IFilter>());
                }
                catch (QueryException e)
                {
                    errors[queryName] = e;
                }
                catch (MappingException e)
                {
                    errors[queryName] = e;
                }
            }

            log.Debug("Checking " + namedSqlQueries.Count + " named SQL queries");
            foreach (KeyValuePair <string, NamedSQLQueryDefinition> entry in namedSqlQueries)
            {
                string queryName           = entry.Key;
                NamedSQLQueryDefinition qd = entry.Value;
                // this will throw an error if there's something wrong.
                try
                {
                    log.Debug("Checking named SQL query: " + queryName);
                    // TODO : would be really nice to cache the spec on the query-def so as to not have to re-calc the hash;
                    // currently not doable though because of the resultset-ref stuff...
                    NativeSQLQuerySpecification spec;
                    if (qd.ResultSetRef != null)
                    {
                        ResultSetMappingDefinition definition = sqlResultSetMappings[qd.ResultSetRef];
                        if (definition == null)
                        {
                            throw new MappingException("Unable to find resultset-ref definition: " + qd.ResultSetRef);
                        }
                        spec = new NativeSQLQuerySpecification(qd.QueryString, definition.GetQueryReturns(), qd.QuerySpaces);
                    }
                    else
                    {
                        spec = new NativeSQLQuerySpecification(qd.QueryString, qd.QueryReturns, qd.QuerySpaces);
                    }
                    queryPlanCache.GetNativeSQLQueryPlan(spec);
                }
                catch (QueryException e)
                {
                    errors[queryName] = e;
                }
                catch (MappingException e)
                {
                    errors[queryName] = e;
                }
            }

            return(errors);
        }
Exemple #6
0
 public void AddSQLQuery(string name, NamedSQLQueryDefinition query)
 {
     CheckQueryExists(name);
     sqlqueries[name] = query;
 }