예제 #1
0
 /// <summary>
 /// Initializes a query expression ast node.
 /// </summary>
 /// <param name="selectClause">select clause</param>
 /// <param name="fromClause">from clasuse</param>
 /// <param name="whereClause">optional where clause</param>
 /// <param name="groupByClause">optional group by clause</param>
 /// <param name="havingClause">optional having clause</param>
 /// <param name="orderByClause">optional order by clause</param>
 internal QueryExpr(
     SelectClause selectClause,
     FromClause fromClause,
     Node whereClause,
     GroupByClause groupByClause,
     HavingClause havingClause,
     OrderByClause orderByClause)
 {
     _selectClause = selectClause;
     _fromClause = fromClause;
     _whereClause = whereClause;
     _groupByClause = groupByClause;
     _havingClause = havingClause;
     _orderByClause = orderByClause;
 }
 internal QueryExpr(
     SelectClause selectClause,
     FromClause fromClause,
     Node whereClause,
     GroupByClause groupByClause,
     HavingClause havingClause,
     OrderByClause orderByClause)
 {
     this._selectClause  = selectClause;
     this._fromClause    = fromClause;
     this._whereClause   = whereClause;
     this._groupByClause = groupByClause;
     this._havingClause  = havingClause;
     this._orderByClause = orderByClause;
 }
예제 #3
0
        public string BuildSQL(string condition, string having, params string[] sorts)
        {
            string sqlstr = SelectClause + " " + FromClause;

            if (condition != null && condition.Trim().Length > 0)
            {
                if (WhereClause == null || WhereClause.Trim().Length <= 0)
                {
                    sqlstr += " where " + condition;
                }
                else
                {
                    sqlstr += " where ( " + condition + " ) and ( " + WhereClause + " )";
                }
            }
            else if (WhereClause != null && WhereClause.Trim().Length > 0)
            {
                sqlstr += " where " + WhereClause;
            }
            if (GroupByList != null && GroupByList.Trim().Length > 0)
            {
                sqlstr += " group by " + GroupByList;
                if (having != null && having.Trim().Length > 0)
                {                //用户指定了条件并且有分组,则用户指定条件合并到HAVING子句中
                    if (HavingClause == null || HavingClause.Trim().Length <= 0)
                    {
                        sqlstr += " having " + having;
                    }
                    else
                    {
                        sqlstr += " having ( " + having + " ) and ( " + HavingClause + " )";
                    }
                }
                else if (HavingClause != null && HavingClause.Trim().Length > 0)
                {
                    sqlstr += " having " + HavingClause;
                }
            }
            if (sorts.Length > 0)
            {
                sqlstr += " " + string.Join(",", sorts);
            }
            else if (OrderByList != null && OrderByList.Trim().Length > 0)
            {
                sqlstr += " order by " + OrderByList;
            }
            return(sqlstr);
        }
예제 #4
0
        public void AddHavingClauses()
        {
            Column              column1              = new Column("Column1");
            Column              column2              = new Column("Column2");
            StringLiteralValue  stringLiteralValue1  = new StringLiteralValue("Value1");
            StringLiteralValue  stringLiteralValue2  = new StringLiteralValue("Value2");
            ComparisonPredicate comparisonPredicate1 = new ComparisonPredicate(column1, ComparisonPredicateType.Equals, stringLiteralValue1);
            ComparisonPredicate comparisonPredicate2 = new ComparisonPredicate(column2, ComparisonPredicateType.Equals, stringLiteralValue2);
            HavingClause        havingClause1        = new HavingClause(comparisonPredicate1);
            HavingClause        havingClause2        = new HavingClause(comparisonPredicate2);
            HavingClauses       havingClauses        = new HavingClauses(havingClause1, BooleanOperatorType.And, havingClause2);

            Assert.AreEqual(havingClause1, havingClauses.LeftClause);
            Assert.AreEqual(BooleanOperatorType.And, havingClauses.OperatorType);
            Assert.AreEqual(havingClause2, havingClauses.RightClause);
        }
예제 #5
0
        /// <summary>
        ///     Generates the SQL text for the whole query.
        /// </summary>
        /// <param name="sb">The SQL text formatter.</param>
        public void RenderSql(SqlBuilderContext sb)
        {
            SelectClause.RenderSql(sb);

            FromClause.RenderSql(sb);

            WhereClause.RenderSql(sb, this);

            GroupByClause.RenderSql(sb);

            HavingClause.RenderSql(sb);

            OrderClause.RenderSql(sb);

            if (!string.IsNullOrEmpty(ForClause))
            {
                sb.AppendOnNewLine(ForClause);
            }
        }
예제 #6
0
        public void TestCloneHavingClause()
        {
            HavingClause havingClause = new HavingClause()
            {
                Expression = new BooleanScalarExpression()
                {
                    ScalarExpression = new ColumnReference()
                    {
                        Identifiers = new List <string>()
                        {
                            "c1"
                        }
                    }
                }
            };

            var clone = havingClause.Clone() as HavingClause;

            Assert.AreEqual(havingClause, clone);
            Assert.IsFalse(ReferenceEquals(havingClause, clone));
            Assert.IsFalse(ReferenceEquals(havingClause.Expression, clone.Expression));
        }
예제 #7
0
        public override void AcceptChildren(WSqlFragmentVisitor visitor)
        {
            if (FromClause != null)
            {
                FromClause.Accept(visitor);
            }
            if (MatchClause != null)
            {
                MatchClause.Accept(visitor);
            }
            if (WhereClause != null)
            {
                WhereClause.Accept(visitor);
            }
            if (TopRowFilter != null)
            {
                TopRowFilter.Accept(visitor);
            }
            if (GroupByClause != null)
            {
                GroupByClause.Accept(visitor);
            }
            if (HavingClause != null)
            {
                HavingClause.Accept(visitor);
            }

            if (SelectElements != null)
            {
                var index = 0;
                for (var count = SelectElements.Count; index < count; ++index)
                {
                    SelectElements[index].Accept(visitor);
                }
            }

            base.AcceptChildren(visitor);
        }
예제 #8
0
        internal override string ToString(string indent)
        {
            var sb = new StringBuilder(1024);

            if (WithPathClause2 != null)
            {
                sb.Append(WithPathClause2.ToString(indent));
            }

            sb.AppendFormat("{0}SELECT ", indent);

            if (TopRowFilter != null)
            {
                if (TopRowFilter.OneLine())
                {
                    sb.AppendFormat("{0} ", TopRowFilter.ToString(""));
                }
                else
                {
                    sb.Append("\r\n");
                    sb.AppendFormat("{0} ", TopRowFilter.ToString(indent));
                }
            }

            switch (UniqueRowFilter)
            {
            case UniqueRowFilter.All:
                sb.Append("ALL ");
                break;

            case UniqueRowFilter.Distinct:
                sb.Append("DISTINCT ");
                break;
            }

            for (var i = 0; i < SelectElements.Count; i++)
            {
                if (i > 0)
                {
                    sb.Append(", ");
                }

                if (SelectElements[i].OneLine())
                {
                    sb.Append(SelectElements[i].ToString(""));
                }
                else
                {
                    sb.Append("\r\n");
                    sb.Append(SelectElements[i].ToString(indent + " "));
                }
            }

            if (Into != null)
            {
                sb.AppendFormat(" INTO {0} ", Into);
            }

            if (FromClause != null)
            {
                sb.Append("\r\n");
                sb.Append(FromClause.ToString(indent));
            }

            if (MatchClause != null)
            {
                sb.Append("\r\n");
                sb.Append(MatchClause.ToString(indent));
            }

            if (WhereClause != null && (WhereClause.SearchCondition != null || !string.IsNullOrEmpty(WhereClause.GhostString)))
            {
                sb.Append("\r\n");
                sb.Append(WhereClause.ToString(indent));
            }

            if (GroupByClause != null)
            {
                sb.Append("\r\n");
                sb.Append(GroupByClause.ToString(indent));
            }

            if (HavingClause != null)
            {
                sb.Append("\r\n");
                sb.Append(HavingClause.ToString(indent));
            }

            if (OrderByClause != null)
            {
                sb.Append("\r\n");
                sb.Append(OrderByClause.ToString(indent));
            }

            return(sb.ToString());
        }
예제 #9
0
/*
 *              private bool ContainsAggregateExpressions(Statement AExpression)
 *              {
 *                      if (AExpression is UnaryExpression)
 *                              return ContainsAggregateExpressions(((UnaryExpression)AExpression).Expression);
 *                      else if (AExpression is BinaryExpression)
 *                              return
 *                                      ContainsAggregateExpressions(((BinaryExpression)AExpression).LeftExpression) ||
 *                                      ContainsAggregateExpressions(((BinaryExpression)AExpression).RightExpression);
 *                      else if (AExpression is AggregateCallExpression)
 *                              return true;
 *                      else if (AExpression is CallExpression)
 *                      {
 *                              foreach (Expression LExpression in ((CallExpression)AExpression).Expressions)
 *                                      if (ContainsAggregateExpressions(LExpression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is CaseExpression)
 *                      {
 *                              CaseExpression LExpression = (CaseExpression)AExpression;
 *                              if (ContainsAggregateExpressions(LExpression.Expression))
 *                                      return true;
 *                              foreach (CaseItemExpression LCaseItem in LExpression.CaseItems)
 *                                      if (ContainsAggregateExpressions(LCaseItem))
 *                                              return true;
 *                              if (ContainsAggregateExpressions(LExpression.ElseExpression))
 *                                      return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is BetweenExpression)
 *                      {
 *                              BetweenExpression LExpression = (BetweenExpression)AExpression;
 *                              return
 *                                      ContainsAggregateExpressions(LExpression.Expression) ||
 *                                      ContainsAggregateExpressions(LExpression.LowerExpression) ||
 *                                      ContainsAggregateExpressions(LExpression.UpperExpression);
 *                      }
 *                      else if (AExpression is UserExpression)
 *                      {
 *                              foreach (Expression LExpression in ((UserExpression)AExpression).Expressions)
 *                                      if (ContainsAggregateExpressions(LExpression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is QueryExpression)
 *                      {
 *                              QueryExpression LExpression = (QueryExpression)AExpression;
 *                              if (ContainsAggregateExpressions(LExpression.SelectExpression))
 *                                      return true;
 *                              foreach (TableOperatorExpression LTableOperator in LExpression.TableOperators)
 *                                      if (ContainsAggregateExpressions(LTableOperator.SelectExpression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is SelectExpression)
 *                      {
 *                              SelectExpression LExpression = (SelectExpression)AExpression;
 *                              return
 *                                      ContainsAggregateExpressions(LExpression.SelectClause) ||
 *                                      ContainsAggregateExpressions(LExpression.FromClause) ||
 *                                      ContainsAggregateExpressions(LExpression.WhereClause) ||
 *                                      ContainsAggregateExpressions(LExpression.GroupClause) ||
 *                                      ContainsAggregateExpressions(LExpression.HavingClause);
 *                      }
 *                      else if (AExpression is SelectClause)
 *                      {
 *                              SelectClause LClause = (SelectClause)AExpression;
 *                              foreach (ColumnExpression LColumn in LClause.Columns)
 *                                      if (ContainsAggregateExpressions(LColumn.Expression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is AlgebraicFromClause)
 *                      {
 *                              AlgebraicFromClause LClause = (AlgebraicFromClause)AExpression;
 *                              if (ContainsAggregateExpressions(LClause.TableSpecifier.TableExpression))
 *                                      return true;
 *                              foreach (JoinClause LJoin in LClause.Joins)
 *                                      if (ContainsAggregateExpressions(LJoin.FromClause) || ContainsAggregateExpressions(LJoin.JoinExpression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is CalculusFromClause)
 *                      {
 *                              CalculusFromClause LClause = (CalculusFromClause)AExpression;
 *                              foreach (TableSpecifier LTable in LClause.TableSpecifiers)
 *                                      if (ContainsAggregateExpressions(LTable.TableExpression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      else if (AExpression is FilterClause)
 *                              return ContainsAggregateExpressions(((FilterClause)AExpression).Expression);
 *                      else if (AExpression is GroupClause)
 *                      {
 *                              GroupClause LClause = (GroupClause)AExpression;
 *                              foreach (Expression LExpression in LClause.Columns)
 *                                      if (ContainsAggregateExpressions(LExpression))
 *                                              return true;
 *                              return false;
 *                      }
 *                      return false;
 *              }
 */

        private void EnsureRestrictedWhereClause()
        {
            if ((_restrictedWhereClause == null) && (_restrictedHavingClause == null))
            {
                // modify the statement to return everything greater than the last row in the set, inclusive, for all key colummns

                /*
                 *      for each column in the key, descending
                 *              [or]
                 *              for each column in the origin less than the current key column
                 *                      [and] ((current origin column is null and current origin value is null) or (current origin column = current origin value))
                 *
                 *              [and]
                 *              if the current key column is the last origin column
                 *                      ((Current key column is null and current origin value is null) or (current key column >= current origin value))
                 *              else
                 *                      current key column > current origin value
                 */
                Expression columnExpression;
                Expression keyExpression;
                Expression restrictExpression = null;

                for (int keyIndex = _keyIndexes.Length - 1; keyIndex >= 0; keyIndex--)
                {
                    keyExpression = null;
                    for (int columnIndex = 0; columnIndex < keyIndex; columnIndex++)
                    {
                        columnExpression =
                            new BinaryExpression
                            (
                                new BinaryExpression
                                (
                                    new UnaryExpression("iIsNull", _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[columnIndex]].Expression),
                                    "iAnd",
                                    new UnaryExpression("iIsNull", new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[columnIndex]].ColumnAlias))
                                ),
                                "iOr",
                                new BinaryExpression
                                (
                                    _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[columnIndex]].Expression,
                                    "iEqual",
                                    new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[columnIndex]].ColumnAlias)
                                )
                            );

                        if (keyExpression != null)
                        {
                            keyExpression = new BinaryExpression(keyExpression, "iAnd", columnExpression);
                        }
                        else
                        {
                            keyExpression = columnExpression;
                        }
                    }

                    if (_statement.OrderClause.Columns[keyIndex].Ascending)
                    {
                                                #if USEINCLUSIVEMULTIPLEX
                        if (keyIndex == (_keyIndexes.Length - 1))
                        {
                            columnExpression =
                                new BinaryExpression
                                (
                                    new UnaryExpression("iIsNull", new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias)),
                                    "iOr",
                                    new BinaryExpression
                                    (
                                        _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression,
                                        "iInclusiveGreater",
                                        new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias)
                                    )
                                );
                        }
                        else
                                                #endif
                        columnExpression =
                            new BinaryExpression
                            (
                                new BinaryExpression
                                (
                                    new UnaryExpression("iNot", new UnaryExpression("iIsNull", _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression)),
                                    "iAnd",
                                    new UnaryExpression("iIsNull", new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias))
                                ),
                                "iOr",
                                new BinaryExpression
                                (
                                    _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression,
                                    "iGreater",
                                    new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias)
                                )
                            );
                    }
                    else
                    {
                                                #if USEINCLUSIVEMULTIPLEX
                        if (keyIndex == (_keyIndexes.Length - 1))
                        {
                            columnExpression =
                                new BinaryExpression
                                (
                                    new UnaryExpression("iIsNull", _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression),
                                    "iOr",
                                    new BinaryExpression
                                    (
                                        _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression,
                                        "iInclusiveLess",
                                        new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias)
                                    )
                                );
                        }
                        else
                                                #endif
                        columnExpression =
                            new BinaryExpression
                            (
                                new BinaryExpression
                                (
                                    new UnaryExpression("iIsNull", _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression),
                                    "iAnd",
                                    new UnaryExpression("iNot", new UnaryExpression("iIsNull", new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias)))
                                ),
                                "iOr",
                                new BinaryExpression
                                (
                                    _statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].Expression,
                                    "iLess",
                                    new QueryParameterExpression(_statement.QueryExpression.SelectExpression.SelectClause.Columns[_keyIndexes[keyIndex]].ColumnAlias)
                                )
                            );
                    }

                    if (keyExpression != null)
                    {
                        keyExpression = new BinaryExpression(keyExpression, "iAnd", columnExpression);
                    }
                    else
                    {
                        keyExpression = columnExpression;
                    }

                    if (restrictExpression != null)
                    {
                        restrictExpression = new BinaryExpression(restrictExpression, "iOr", keyExpression);
                    }
                    else
                    {
                        restrictExpression = keyExpression;
                    }
                }

                if (_isAggregate)
                {
                    _restrictedHavingClause = new HavingClause();
                    if (_originalHavingClause != null)
                    {
                        _restrictedHavingClause.Expression = new BinaryExpression(_originalHavingClause.Expression, "iAnd", restrictExpression);
                    }
                    else
                    {
                        _restrictedHavingClause.Expression = restrictExpression;
                    }
                }
                else
                {
                    _restrictedWhereClause = new WhereClause();
                    if (_originalWhereClause != null)
                    {
                        _restrictedWhereClause.Expression = new BinaryExpression(_originalWhereClause.Expression, "iAnd", restrictExpression);
                    }
                    else
                    {
                        _restrictedWhereClause.Expression = restrictExpression;
                    }
                }
            }
        }
예제 #10
0
        public override void Visit(QuerySpecification node)
        {
            WhereClause  lol = node.WhereClause;
            HavingClause xD  = node.HavingClause;

            if (lol != null)
            {
                if (!GetNodeTokenText(lol).ToLower().Contains("select"))
                {
                    seperate(GetNodeTokenText(lol).ToLower().Replace("where", ""));
                }
                else
                {
                    seperate(GetNodeTokenText(lol).ToLower().Substring(6, GetNodeTokenText(lol).Length - 6));
                }
            }
            if (xD != null)
            {
                string havingClause = GetNodeTokenText(xD).ToLower().Substring(6, GetNodeTokenText(xD).Length - 6);
                havingClause = havingClause.Replace("\r\n", "");
                Regex rgx = new Regex(@"\s+");
                havingClause = rgx.Replace(havingClause, " ");
                selection   += "|" + havingClause;
                filtreHaving = havingClause;
            }

            /* MY BIG PART OF CODE ! mouahaha*/
            id_requete_courante = Int32.Parse(this.id);
            node.ToString();

            bool starExpression = false;

            if (this.id_requete_courante != this.id_requete_precedante)
            {
                projectionList = new List <String>();
                Regex rxUser = new Regex(@"\[[^\[\]\(\)]*\]\.\[[^\[\]\(\)]*\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
                // Find matches.//
                //Console.WriteLine(this.PhysicalTableList["[1002].[Tokyo_0_merged.csv]"]);
                MatchCollection matchesUser = rxUser.Matches(this.requete);
                if (matchesUser.Count > 0)
                {
                    String matchTexte = matchesUser[0].Groups[0].Value;
                    this.user_courant = matchTexte.Split('.')[0].Replace("[", "").Replace("]", "");
                }
                if (node.SelectElements != null)
                {
                    foreach (TSqlFragment selectElement in node.SelectElements)
                    {
                        if (selectElement is SelectStarExpression)
                        {
                            starExpression = true;
                            if (node.SelectElements.Count > 1)
                            {
                                //Lever une exception qui dit que c'est non géré*

                                break;
                            }
                            else
                            {
                                if (node.FromClause != null)
                                {
                                    foreach (TSqlFragment fromElement in node.FromClause.TableReferences)
                                    {
                                        if (fromElement is NamedTableReference)
                                        {
                                            String namedTableReferenceText = GetNodeTokenText(fromElement);
                                            if (this.dictTableWith.ContainsKey(this.id_requete_courante))
                                            {
                                                foreach (CommonTableExpression commonTableExpression in this.dictTableWith[this.id_requete_courante])
                                                {
                                                    if (commonTableExpression.ExpressionName.Value == namedTableReferenceText)
                                                    {
                                                        if (commonTableExpression.QueryExpression is QuerySpecification)
                                                        {
                                                            QuerySpecification queryUsedForTableDefinition = (QuerySpecification)commonTableExpression.QueryExpression;
                                                            foreach (SelectElement selectElementInQueryUsedForTableDefinition in queryUsedForTableDefinition.SelectElements)
                                                            {
                                                                projectionList.Add(GetNodeTokenText(selectElementInQueryUsedForTableDefinition));
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                Regex rx = new Regex(@"\[.*\]\.\[.*\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
                                                // Find matches.
                                                //Console.WriteLine(this.PhysicalTableList["[1002].[Tokyo_0_merged.csv]"]);
                                                String          matchText = "";
                                                MatchCollection matches   = rx.Matches(namedTableReferenceText);
                                                if (matches.Count > 0)
                                                {
                                                    matchText = matches[0].Groups[0].Value;
                                                }
                                                if (this.PhysicalTableList.ContainsKey(matchText.ToLower()))
                                                {
                                                    foreach (String attribut in this.PhysicalTableList[matchText.ToLower()])
                                                    {
                                                        projectionList.Add(attribut);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (starExpression == false)
                    {
                        foreach (SelectElement selectElement in node.SelectElements)
                        {
                            if (GetNodeTokenText(selectElement).Contains(','))
                            {
                                //  Console.WriteLine(GetNodeTokenText(selectElement));
                            }
                            projectionList.Add(GetNodeTokenText(selectElement));
                        }
                    }
                }

                ProjectionListPerQuery.Add(this.id_requete_courante, projectionList);
                int nombreProjectionsCommunes = 0;
                int nombreProjections         = projectionList.Count;
                if (user_precedant.Equals("") || !user_courant.Equals(user_precedant))
                {
                    nombreProjectionsCommunes = 0;
                    if (!user_courant.Equals(user_precedant))
                    {
                        this.id_explo = this.id_explo + 1;
                    }
                }
                else
                {
                    if (user_precedant.Equals(user_courant))
                    {
                        nombreProjectionsCommunes = previousProjectionList.Intersect(projectionList, StringComparer.InvariantCultureIgnoreCase).ToList().Count;
                        //Faire l'intersection
                    }
                }
                using (StreamWriter sw = File.AppendText(path_explo))
                {
                    sw.WriteLine(this.id_requete_courante + ";" + user_courant + ";" + this.id_explo);
                }
                previousProjectionList = projectionList;
                user_precedant         = user_courant;

                using (StreamWriter sw = File.AppendText(path_myfriend))
                {
                    sw.Write("\n-------\nProjection pour la requête : " + this.requete);
                    //sw.Write("Projections pour la requête : " + text_requete_courante);
                    // Console.WriteLine(" Sont : ");
                    //sw.Write("\n Sont :");

                    foreach (String projection in projectionList)
                    {
                        //Console.WriteLine(projection);
                        sw.Write("\n" + projection);
                    }
                    sw.Write("\n--------\n");
                }
            }

            this.id_requete_precedante = this.id_requete_courante;
        }
예제 #11
0
 public override void Visit(HavingClause node) { this.action(node); }
예제 #12
0
 public override void ExplicitVisit(HavingClause node)
 {
     Rewrite(node, n => n.SearchCondition);
     base.ExplicitVisit(node);
 }
예제 #13
0
 public override void ExplicitVisit(HavingClause node)
 {
     _ignoreAliases = true;
     base.ExplicitVisit(node);
     _ignoreAliases = false;
 }
예제 #14
0
        /// <summary>
        ///     Renders the object model in it's EPL syntax textual representation, using a whitespace-formatter as provided.
        /// </summary>
        /// <param name="formatter">the formatter to use</param>
        /// <param name="writer">writer to use</param>
        /// <throws>IllegalStateException if required clauses do not exist</throws>
        public void ToEPL(
            EPStatementFormatter formatter,
            TextWriter writer)
        {
            AnnotationPart.ToEPL(writer, Annotations, formatter);
            ExpressionDeclaration.ToEPL(writer, ExpressionDeclarations, formatter);
            ScriptExpression.ToEPL(writer, ScriptExpressions, formatter);
            ClassProvidedExpression.ToEPL(writer, ClassProvidedExpressions, formatter);

            if (ContextName != null)
            {
                formatter.BeginContext(writer);
                writer.Write("context ");
                writer.Write(ContextName);
            }

            if (CreateIndex != null)
            {
                formatter.BeginCreateIndex(writer);
                CreateIndex.ToEPL(writer);
                return;
            }

            if (CreateSchema != null)
            {
                formatter.BeginCreateSchema(writer);
                CreateSchema.ToEPL(writer);
                return;
            }

            if (CreateExpression != null)
            {
                formatter.BeginCreateExpression(writer);
                CreateExpression.ToEPL(writer);
                return;
            }

            if (CreateClass != null)
            {
                formatter.BeginCreateExpression(writer);
                CreateClass.ToEPL(writer);
                return;
            }

            if (CreateContext != null)
            {
                formatter.BeginCreateContext(writer);
                CreateContext.ToEPL(writer, formatter);
                return;
            }

            if (CreateWindow != null)
            {
                formatter.BeginCreateWindow(writer);
                CreateWindow.ToEPL(writer);

                writer.Write(" as ");

                if (SelectClause == null || SelectClause.SelectList.IsEmpty() && !CreateWindow.Columns.IsEmpty())
                {
                    CreateWindow.ToEPLCreateTablePart(writer);
                }
                else
                {
                    SelectClause.ToEPL(writer, formatter, false, false);
                    if (CreateWindow.AsEventTypeName != null)
                    {
                        writer.Write(" from ");
                        writer.Write(CreateWindow.AsEventTypeName);
                    }

                    CreateWindow.ToEPLInsertPart(writer);
                }

                return;
            }

            if (CreateVariable != null)
            {
                formatter.BeginCreateVariable(writer);
                CreateVariable.ToEPL(writer);
                return;
            }

            if (CreateTable != null)
            {
                formatter.BeginCreateTable(writer);
                CreateTable.ToEPL(writer);
                return;
            }

            if (CreateDataFlow != null)
            {
                formatter.BeginCreateDataFlow(writer);
                CreateDataFlow.ToEPL(writer, formatter);
                return;
            }

            var displayWhereClause = true;

            if (UpdateClause != null)
            {
                formatter.BeginUpdate(writer);
                UpdateClause.ToEPL(writer);
            }
            else if (OnExpr != null)
            {
                formatter.BeginOnTrigger(writer);
                writer.Write("on ");
                FromClause.Streams[0].ToEPL(writer, formatter);

                if (OnExpr is OnDeleteClause onDeleteClause)
                {
                    formatter.BeginOnDelete(writer);
                    writer.Write("delete from ");
                    onDeleteClause.ToEPL(writer);
                }
                else if (OnExpr is OnUpdateClause onUpdateClause)
                {
                    formatter.BeginOnUpdate(writer);
                    writer.Write("update ");
                    onUpdateClause.ToEPL(writer);
                }
                else if (OnExpr is OnSelectClause onSelectClause)
                {
                    InsertInto?.ToEPL(writer, formatter, true);
                    SelectClause.ToEPL(writer, formatter, true, onSelectClause.IsDeleteAndSelect);
                    writer.Write(" from ");
                    onSelectClause.ToEPL(writer);
                }
                else if (OnExpr is OnSetClause onSetClause)
                {
                    onSetClause.ToEPL(writer, formatter);
                }
                else if (OnExpr is OnMergeClause onMergeClause)
                {
                    onMergeClause.ToEPL(writer, WhereClause, formatter);
                    displayWhereClause = false;
                }
                else
                {
                    var split = (OnInsertSplitStreamClause)OnExpr;
                    InsertInto.ToEPL(writer, formatter, true);
                    SelectClause.ToEPL(writer, formatter, true, false);
                    if (WhereClause != null)
                    {
                        writer.Write(" where ");
                        WhereClause.ToEPL(writer, ExpressionPrecedenceEnum.MINIMUM);
                    }

                    split.ToEPL(writer, formatter);
                    displayWhereClause = false;
                }
            }
            else
            {
                IntoTableClause?.ToEPL(writer);

                if (SelectClause == null)
                {
                    throw new IllegalStateException("Select-clause has not been defined");
                }

                if (FromClause == null)
                {
                    throw new IllegalStateException("From-clause has not been defined");
                }

                if (FireAndForgetClause is FireAndForgetUpdate fireAndForgetUpdate)
                {
                    writer.Write("update ");
                    FromClause.ToEPLOptions(writer, formatter, false);
                    writer.Write(" ");
                    UpdateClause.RenderEPLAssignments(writer, fireAndForgetUpdate.Assignments);
                }
                else if (FireAndForgetClause is FireAndForgetInsert fireAndForgetInsert)
                {
                    InsertInto.ToEPL(writer, formatter, true);
                    if (fireAndForgetInsert.IsUseValuesKeyword)
                    {
                        writer.Write(" values (");
                        var delimiter = "";
                        foreach (var element in SelectClause.SelectList)
                        {
                            writer.Write(delimiter);
                            element.ToEPLElement(writer);
                            delimiter = ", ";
                        }

                        writer.Write(")");
                    }
                    else
                    {
                        SelectClause.ToEPL(writer, formatter, true, false);
                    }
                }
                else if (FireAndForgetClause is FireAndForgetDelete)
                {
                    writer.Write("delete ");
                    FromClause.ToEPLOptions(writer, formatter, true);
                }
                else
                {
                    InsertInto?.ToEPL(writer, formatter, true);
                    SelectClause.ToEPL(writer, formatter, true, false);
                    FromClause.ToEPLOptions(writer, formatter, true);
                }
            }

            MatchRecognizeClause?.ToEPL(writer);

            if (WhereClause != null && displayWhereClause)
            {
                formatter.BeginWhere(writer);
                writer.Write("where ");
                WhereClause.ToEPL(writer, ExpressionPrecedenceEnum.MINIMUM);
            }

            if (GroupByClause != null)
            {
                formatter.BeginGroupBy(writer);
                writer.Write("group by ");
                GroupByClause.ToEPL(writer);
            }

            if (HavingClause != null)
            {
                formatter.BeginHaving(writer);
                writer.Write("having ");
                HavingClause.ToEPL(writer, ExpressionPrecedenceEnum.MINIMUM);
            }

            if (OutputLimitClause != null)
            {
                formatter.BeginOutput(writer);
                writer.Write("output ");
                OutputLimitClause.ToEPL(writer);
            }

            if (OrderByClause != null)
            {
                formatter.BeginOrderBy(writer);
                writer.Write("order by ");
                OrderByClause.ToEPL(writer);
            }

            if (RowLimitClause != null)
            {
                formatter.BeginLimit(writer);
                writer.Write("limit ");
                RowLimitClause.ToEPL(writer);
            }

            if (ForClause != null)
            {
                formatter.BeginFor(writer);
                ForClause.ToEPL(writer);
            }
        }
예제 #15
0
 protected string CompileHaving(HavingClause having)
 {
     // TODO: Check for RAW type
     return(CompileBasicHaving(having));
 }
예제 #16
0
        public QsiGroupingExpressionNode VisitGroupByClause(GroupByClause groupByClause, HavingClause havingClause)
        {
            return(TreeHelper.Create <QsiGroupingExpressionNode>(n =>
            {
                n.Items.AddRange(groupByClause.GroupingSpecifications.Select(VisitGroupSpecifcation));

                if (havingClause != null)
                {
                    n.Having.SetValue(VisitHavingClause(havingClause));
                }

                SqlServerTree.PutFragmentSpan(n, groupByClause);
            }));
        }
예제 #17
0
 public QsiExpressionNode VisitHavingClause(HavingClause havingClause)
 {
     return(ExpressionVisitor.VisitBooleanExpression(havingClause.SearchCondition));
 }
예제 #18
0
 public override string Render(HavingClause havingClause)
 {
     return(string.Format("{0}", havingClause.Predicate.Render(this)));
 }
예제 #19
0
 public abstract string Render(HavingClause havingClause);
예제 #20
0
 public virtual void VisitHavingClause(HavingClause havingClause)
 {
     Visit(havingClause.Expression);
     //DONE
 }
예제 #21
0
        public override void Visit(QuerySpecification node)
        {
            WhereClause  lol = node.WhereClause;
            HavingClause xD  = node.HavingClause;

            if (lol != null)
            {
                if (!GetNodeTokenText(lol).ToLower().Contains("select"))
                {
                    seperate(GetNodeTokenText(lol).ToLower().Replace("where", ""));
                }
                else
                {
                    seperate(GetNodeTokenText(lol).ToLower().Substring(6, GetNodeTokenText(lol).Length - 6));
                }
            }
            if (xD != null)
            {
                string havingClause = GetNodeTokenText(xD).ToLower().Substring(6, GetNodeTokenText(xD).Length - 6);
                havingClause = havingClause.Replace("\r\n", "");
                Regex rgx = new Regex(@"\s+");
                havingClause = rgx.Replace(havingClause, " ");
                selection   += "|" + havingClause;
                filtreHaving = havingClause;
            }

            /* MY BIG PART OF CODE ! mouahaha*/
            id_requete_courante = Int32.Parse(this.id);
            node.ToString();

            //bool starExpression = false;

            if (this.id_requete_courante != this.id_requete_precedante)
            {
                projectionList = new List <String>();
                Regex rxUser = new Regex(@"\[[^\[\]\(\)]*\]\.\[[^\[\]\(\)]*\]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
                // Find matches.//
                //Console.WriteLine(this.PhysicalTableList["[1002].[Tokyo_0_merged.csv]"]);
                MatchCollection matchesUser = rxUser.Matches(this.requete);
                if (matchesUser.Count > 0)
                {
                    String matchTexte = matchesUser[0].Groups[0].Value;
                    this.user_courant = matchTexte.Split('.')[0].Replace("[", "").Replace("]", "");
                }
                //Jesus christ
                recursifRecuperationProjection(node);

                ProjectionListPerQuery.Add(this.id_requete_courante, projectionList);
                int nombreProjectionsCommunes = 0;
                int nombreProjections         = projectionList.Count;
                if (user_precedant.Equals("") || !user_courant.Equals(user_precedant))
                {
                    nombreProjectionsCommunes = 0;
                    if (!user_courant.Equals(user_precedant))
                    {
                        this.id_explo = this.id_explo + 1;
                    }
                }
                else
                {
                    if (user_precedant.Equals(user_courant))
                    {
                        nombreProjectionsCommunes = previousProjectionList.Intersect(projectionList, StringComparer.InvariantCultureIgnoreCase).ToList().Count;
                        //Faire l'intersection
                    }
                }
                using (StreamWriter sw = File.AppendText(path_explo))
                {
                    sw.WriteLine(this.id_requete_courante + ";" + user_courant + ";" + this.id_explo);
                }
                previousProjectionList = projectionList;
                user_precedant         = user_courant;

                using (StreamWriter sw = File.AppendText(path_myfriend))
                {
                    sw.Write("\n-------\nProjection pour la requête : " + this.requete);
                    //sw.Write("Projections pour la requête : " + text_requete_courante);
                    // Console.WriteLine(" Sont : ");
                    //sw.Write("\n Sont :");

                    foreach (String projection in projectionList)
                    {
                        //Console.WriteLine(projection);
                        sw.Write("\n" + projection);
                    }
                    sw.Write("\n--------\n");
                }
            }

            this.id_requete_precedante = this.id_requete_courante;
        }
 public override void ExplicitVisit(HavingClause fragment)
 {
     _fragments.Add(fragment);
 }
예제 #23
0
		protected virtual string GetClauseSql (HavingClause clause)
		{
			throw new NotImplementedException ();
		}
예제 #24
0
 protected virtual string GetClauseSql(HavingClause clause)
 {
     throw new NotImplementedException();
 }