예제 #1
0
        private object GetAggregatedValue(string fnName, FilterExpression filter)
        {
            // adding filter
            List <object> parameterValues = new List <object>();
            string        filterString    = filter.GetFilterString(parameterValues);

            if (string.IsNullOrEmpty(filterString) == false)
            {
                filterString = " Where (" + filterString + ")";
            }

            string hqlQuery = "Select " + fnName + " from " + this.GetTableName(GetSourceTypeEnum.View) + filterString;

            hqlQuery = hqlQuery.Replace("[", "").Replace("]", "");
            var query = NHibernateSession.CreateQuery(hqlQuery);

            // adding parameters
            for (int i = 0; i < parameterValues.Count; i++)
            {
                query.SetParameter(Filter.ParameterPrefix.Substring(1) + i, parameterValues[i]);
            }

            var currentSeq = query.List();

            if (currentSeq == null)
            {
                return(null);
            }
            else
            {
                return(currentSeq[0]);
            }
        }
        public void FilterExpressionConstructorTest2()
        {
            FilterExpression target = new FilterExpression();
            string           actual = target.GetFilterString(null);

            Assert.AreEqual("", actual);
        }
        public void GetFilterStringTest4()
        {
            FilterExpression target = new FilterExpression();

            target.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C1"));
            target.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C2"));
            target.LogicalOperator = FilterLogicalOperatorEnum.OR;
            FilterExpression filterExp2 = new FilterExpression();

            filterExp2.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C3"));
            filterExp2.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C4"));
            target.AddFilterExpression(filterExp2);
            Assert.AreEqual(target.FiltersList.Count, 3);
            List <object> filterValues = new List <object>();
            string        actual       = target.GetFilterString(filterValues);
            string        expected     = "(" + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "0") +
                                         " OR " + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "1") + "" +
                                         " OR (" + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "2") + "" +
                                         " AND " + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "3") + ")" +
                                         ")";

            Assert.AreEqual(expected, actual);
            Assert.AreEqual(filterValues.Count, 4);
            Assert.AreEqual(filterValues[0], "C1");
            Assert.AreEqual(filterValues[1], "C2");
            Assert.AreEqual(filterValues[2], "C3");
            Assert.AreEqual(filterValues[3], "C4");
        }
        public void AndMergeTest()
        {
            // empty test
            FilterExpression target     = new FilterExpression();
            FilterExpression filterExp2 = new FilterExpression();

            target.AndMerge(filterExp2);
            Assert.AreEqual(target.FiltersList.Count, 1);
            List <object> valuesList = new List <object>();
            string        s          = target.GetFilterString(valuesList);

            Assert.AreEqual(s, "");
        }
        public void GetFilterStringTest()
        {
            FilterExpression target       = new FilterExpression();
            Filter           filter       = new Filter(vTestCaseTester.ColumnNames.FieldString, "C'ode");
            List <object>    filterValues = new List <object>();

            target.AddFilter(filter);
            string actual   = target.GetFilterString(filterValues);
            string expected = "" + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "0");

            Assert.AreEqual(expected, actual);
            Assert.AreEqual(filterValues.Count, 1);
            Assert.AreEqual(filterValues[0], "C'ode");
        }
        public void GetFilterStringTest2()
        {
            FilterExpression target = new FilterExpression();

            target.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C0"));
            target.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C1"));
            List <object> filterValues = new List <object>();
            string        actual       = target.GetFilterString(filterValues);
            string        expected     = "(" + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "0") + " " + "AND" +
                                         " " + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "1") + ")";

            Assert.AreEqual(expected, actual);
            Assert.AreEqual(filterValues.Count, 2);
            Assert.AreEqual(filterValues[0], "C0");
            Assert.AreEqual(filterValues[1], "C1");
        }
        public void AndMergeTest2()
        {
            FilterExpression target = new FilterExpression();

            target.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C1"));
            FilterExpression filterExp2 = new FilterExpression();

            filterExp2.AddFilter(new Filter(vTestCaseTester.ColumnNames.FieldString, "C2"));
            target.AndMerge(filterExp2);
            Assert.AreEqual(target.FiltersList.Count, 2);
            List <object> valuesList = new List <object>();
            string        actual     = target.GetFilterString(valuesList);
            string        expected   = "(" + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "0") +
                                       " AND " + GetSimpleFilterString(vTestCaseTester.ColumnNames.FieldString, "=", Filter.ParameterPrefix + "1") + ")";

            Assert.AreEqual(actual, expected);
        }
예제 #8
0
        /// <summary>
        /// Gets the by filter.
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public System.Collections.IList GetByFilter(GetByFilterParameters parameters)
        {
            //NHibernateSession.Clear(); // temprorary fix for Dataaccess bug

            // used from http://ayende.com/blog/4023/nhibernate-queries-examples

            string           selectColumns = "";
            SortExpression   sort          = parameters.Sort;
            FilterExpression filter        = parameters.Filter;
            int pageIndex = parameters.PageIndex;
            int pageSize  = parameters.PageSize;

            if (pageSize == -1) // invalid value
            {
                pageSize = this.Entity.DefaultPageSize;
            }

            // Column Names
            ICollection <string> colNames = parameters.SelectColumns;

            if (colNames != null && colNames.Count > 0)
            {
                // adding ID field name to any select from the database to prevent null (-1) id problems
                if (string.IsNullOrEmpty(this.Entity.IDFieldName) == false)
                {
                    if (colNames.Contains(this.Entity.IDFieldName) == false)
                    {
                        colNames.Add(this.Entity.IDFieldName);
                    }
                }
                selectColumns = "Select ";
                int i = 0;
                foreach (string col in colNames)
                {
                    selectColumns += col;
                    if (i != colNames.Count - 1)
                    {
                        selectColumns += ",";
                    }
                    else
                    {
                        selectColumns += " ";
                    }
                    i++;
                }
            }

            // sort
            string sortString = sort.GetSortExpressionString();

            if (string.IsNullOrEmpty(sortString) == false)
            {
                sortString = " Order By " + sortString;
            }

            // adding filter
            List <object> parameterValues = new List <object>();
            string        filterString    = filter.GetFilterString(parameterValues);

            if (string.IsNullOrEmpty(filterString) == false)
            {
                filterString = " Where (" + filterString + ")";
            }

            string hqlQuery = selectColumns + "from " + this.GetTableName(parameters.SourceType) + filterString + sortString;

            hqlQuery = hqlQuery.Replace("[", "").Replace("]", "");
            var query = NHibernateSession.CreateQuery(hqlQuery);

            // adding parameters
            for (int i = 0; i < parameterValues.Count; i++)
            {
                string paramName = Filter.ParameterPrefix.Substring(1) + i;
                if (parameterValues[i] is System.Collections.ICollection)  // for in operator, we can have a list of items. It works in HQL, but we need to pass it as parameterList
                // read more here: http://stackoverflow.com/questions/3390561/nhibernate-update-single-field-without-loading-entity
                {
                    query.SetParameterList(paramName, (System.Collections.ICollection)parameterValues[i]);
                }
                else
                {
                    query.SetParameter(paramName, parameterValues[i]);
                }
            }

            // set paging
            query.SetFirstResult(pageIndex * pageSize).SetMaxResults(pageSize);

            if (colNames == null)
            {
                if (parameters.SourceType == GetSourceTypeEnum.Table)
                {
                    return(query.List <T>() as List <T>);
                }
                else
                {
                    return(query.List <V>() as List <V>);
                }
            }
            else
            {
                var list = query.List();
                return(ConvertToTypedList(parameters.SourceType, colNames, list));
            }
        }