예제 #1
0
        public string Build(SQLPartHelper helper)
        {
            helper.Indent();
            var selectString = "";

            foreach (var item in _what)
            {
                if (selectString.Length != 0)
                {
                    selectString += _separator;
                    if (NewLine)
                    {
                        selectString += helper.NewLine;
                    }
                }
                string x;

                if (item is object[])
                {
                    x = helper.Translate(new CommaSeparated((object[])item, _separator, _addParenthesis)
                    {
                        NewLine = NewLine
                    });
                }
                else if (item is EasySql.SelectItems)
                {
                    x = helper.Translate(new CommaSeparated((object[])((EasySql.SelectItems)item)._items.ToArray(), _separator, _addParenthesis)
                    {
                        NewLine = NewLine
                    });
                }
                else if (item is EasySql.SelectItem && ((EasySql.SelectItem)item)._item is EasySql.SelectItem[])
                {
                    x = helper.Translate(new CommaSeparated((object[])((EasySql.SelectItem[])((EasySql.SelectItem)item)._item), _separator, _addParenthesis)
                    {
                        NewLine = NewLine
                    });
                }
                else
                {
                    x = helper.Translate(item);
                }
                if (_addParenthesis)
                {
                    x = "(" + x + ")";
                }
                selectString += x;
            }
            helper.UnIndent();
            return(selectString);
        }
예제 #2
0
            private string InternalBuild(SQLPartHelper helper)
            {
                if (_from.Count == 0)
                {
                    var entitiesDone = new HashSet <Entity>();
                    foreach (var item in _select)
                    {
                        var c = item._item as ColumnBase;
                        if (c != null)
                        {
                            if (!entitiesDone.Contains(c.Entity))
                            {
                                _from.Add(c.Entity);
                                entitiesDone.Add(c.Entity);
                            }
                        }
                    }
                    if (_from.Count == 0)
                    {
                        throw new InvalidOperationException("Couldn't figure out the from");
                    }
                }
                foreach (var item in _from)
                {
                    item.RegisterEntity(helper);
                }

                if (_joins != null)
                {
                    foreach (var item in _joins)
                    {
                        helper.RegisterEntities(item.To);
                    }
                }

                var tempFrom = new List <object>();

                foreach (var item in _from)
                {
                    var z = item._what as SqlStatementKeywordBase;
                    if (z != null)
                    {
                        tempFrom.Add(new SqlPart(z, " ", helper.generateAlias()));
                    }
                    else
                    {
                        tempFrom.Add(item._what);
                    }
                }

                var theFrom = helper.Translate(new CommaSeparated(tempFrom)
                {
                    NewLine = true
                });

                helper.Indent();
                if (_joins != null)
                {
                    foreach (var j in _joins)
                    {
                        theFrom += helper.NewLine + (j.joinType) + " join " + helper.Translate(j.To) + " on " + helper.Translate(j.On);
                    }
                }
                helper.UnIndent();

                string theWhere = helper.Translate(And(_where.ToArray()));

                if (theWhere != "")
                {
                    theWhere = helper.NewLine + " Where " + theWhere;
                }

                var result = "Select " + helper.Translate(new CommaSeparated(_select)
                {
                    NewLine = true
                }) +
                             helper.NewLine + "  From " + theFrom +
                             theWhere;

                if (_groupBy != null && _groupBy.Count > 0)
                {
                    result += helper.NewLine + "Group by " + helper.Translate(new CommaSeparated(_groupBy)
                    {
                        NewLine = true
                    });
                }
                if (_having.Count > 0)
                {
                    result += helper.NewLine + "Having " + helper.Translate(And(_having.ToArray()));
                }


                if (_orderBy != null && _orderBy.Count > 0)
                {
                    result += BuildOrderBy(helper, _orderBy);;
                }
                return(result);
            }