Exemple #1
0
        /// <summary>
        /// Selections the clause.
        /// </summary>
        /// <param name="selectionCriterion">The selectionCriterion.</param>
        /// <returns></returns>
        private string SelectionClause(SelectionCriterion selectionCriterion, bool forParameters)
        {
            string result = string.Empty;

            if (selectionCriterion.Expression == Expression.None)
            {
                if (selectionCriterion == null)
                {
                    throw new NullReferenceException("SelectionCriterion cannot be null!");
                }
                if (!m_Types.Contains(selectionCriterion.Type))
                {
                    m_Types.Add(selectionCriterion.Type);
                }
                selectionCriterion.PropertyAlias = AppInfo.GetTableName(selectionCriterion.Type) + ".";
                if (selectionCriterion.OriginalPropertyName != "ObjectKey")
                {
                    selectionCriterion.PropertyAlias += selectionCriterion.OriginalPropertyName;
                }
                else
                {
                    selectionCriterion.PropertyAlias += AppInfo.GetTableName(selectionCriterion.Type) + "Key";
                }
                string expression = string.Empty;
                if (m_PreviousSelectionCriterion != null && m_PreviousSelectionCriterion.Expression == Expression.Begin)
                {
                    expression = "(";
                }
                if (forParameters)
                {
                    object value = selectionCriterion.Value;
                    if (selectionCriterion.ComparisonMethod == ComparisonMethod.In || selectionCriterion.ComparisonMethod == ComparisonMethod.NotIn)
                    {
                        if (value != null)
                        {
                            object   obj   = value;
                            Array    array = obj as Array;
                            object[] objs  = new object[array.Length];
                            int      i     = 0;
                            foreach (var item in array)
                            {
                                objs[i++] = item;
                            }
                            value = objs;
                        }
                        else
                        {
                            throw new InvalidOperationException("ComparisonMethod.In/ComparisonMethod.NotIn cannot have a null object value");
                        }
                    }
                    string text = ComparisonTextForParameters(m_DataObjectBroker, selectionCriterion.ComparisonMethod, ref value, m_Parameters.Count);
                    if (value != null)
                    {
                        if (selectionCriterion.ComparisonMethod != ComparisonMethod.In && selectionCriterion.ComparisonMethod != ComparisonMethod.NotIn)
                        {
                            m_Parameters.Add(value);
                        }
                        else
                        {
                            for (int i = 0; i < ((object[])value).Length; i++)
                            {
                                m_Parameters.Add(((object[])value)[i]);
                            }
                        }
                    }
                    result = OperandText(selectionCriterion.OperandType) + " " + expression + ColumnAlias(selectionCriterion) + " " + text + " ";
                }
                else
                {
                    result = OperandText(selectionCriterion.OperandType) + " " + expression +
                             ColumnAlias(selectionCriterion) + " " +
                             ComparisonText(m_DataObjectBroker, selectionCriterion.ComparisonMethod, selectionCriterion.Value, selectionCriterion.Property.PropertyType) + " ";
                }
            }
            else if (selectionCriterion.Expression == Expression.Begin)
            {
                result = string.Empty;
            }
            else if (selectionCriterion.Expression == Expression.End)
            {
                result = ") ";
            }
            else
            {
                throw new ApplicationException("Could not generate where clause!");
            }
            m_PreviousSelectionCriterion = selectionCriterion;
            return(result);
        }
        /// <summary>
        /// Sets the order by clause.
        /// </summary>
        private void SetOrderByClause()
        {
            int index = -1;

            OrderBy = string.Empty;

            foreach (OrderCriterion orderCriterion in base.OrderCriteriaList)
            {
                string persistentTypeName = AppInfo.GetTableName(orderCriterion.Type);

                index++;

                if (index > 0)
                {
                    OrderBy += ", ";
                }

                if (orderCriterion.OriginalPropertyName != "ObjectKey")
                {
                    if (orderCriterion.XmlPath == string.Empty)
                    {
                        string pTypeName = PersistentTypeName != null && !String.Empty.Equals(PersistentTypeName) ? PersistentTypeName : persistentTypeName;
                        string field     = string.Format("{0}." + "{1}", pTypeName, orderCriterion.OriginalPropertyName);

                        if (orderCriterion.AggregateFunction == AggregateFunction.None)
                        {
                            OrderBy += field;
                        }
                        else
                        {
                            OrderBy += string.Format("{0}({1})", orderCriterion.AggregateFunction, field);
                        }
                    }
                    else
                    {
                        char[]   delimiterChars = { '.' };
                        string[] xmlColumn      = orderCriterion.OriginalPropertyName.Split(delimiterChars);
                        OrderBy += m_DataObjectBroker.ConnectionInfo.GetXmlOrder(persistentTypeName, xmlColumn, orderCriterion.XmlPath, GetDataType(orderCriterion));
                    }
                }
                else
                {
                    string field = persistentTypeName + "." + persistentTypeName + "Key";

                    if (orderCriterion.AggregateFunction == AggregateFunction.None)
                    {
                        OrderBy += field;
                    }
                    else
                    {
                        OrderBy += string.Format("{0}({1})", orderCriterion.AggregateFunction, field);
                    }
                }

                OrderBy += " ";

                if (m_Reverse)
                {
                    if (orderCriterion.SortOrder.ToUpper().Equals("ASC"))
                    {
                        orderCriterion.SortOrder = "DESC";
                    }
                    else
                    {
                        orderCriterion.SortOrder = "ASC";
                    }
                }

                OrderBy += orderCriterion.SortOrder;
            }

            if (OrderBy.Length > 0)
            {
                OrderBy = "ORDER BY " + OrderBy;
            }
        }