public void MatchesPredicate_Constructor_SetsFieldObject()
        {
            var expectedFields = new TestPredicateFields();
            var predicate      = new ExistsPredicate <TestPredicateFields>(expectedFields);

            Assert.AreSame(expectedFields, predicate.Fields);
        }
Exemple #2
0
        internal gsWhereTermBase GetWhereTerm(ExistsPredicate existsPredicate, gsExistsOrNotExists existsOrNotExists)
        {
            gsWhereTermExistsOrNotExists whereTerm = new gsWhereTermExistsOrNotExists();

            whereTerm.ExistsType = existsOrNotExists;

            if (existsPredicate.Subquery.QueryExpression is QuerySpecification)
            {
                gsSelectQuery subQry = new gsSelectQuery();
                subQry.QryName      = $"subQry{gsSelectQuery.GetNextID()}";
                whereTerm.QueryName = subQry.QryName;

                QuerySpecification qrySpec = existsPredicate.Subquery.QueryExpression as QuerySpecification;

                gsSelectQueryParser qryParser = new gsSelectQueryParser();
                qryParser.ProcessQuerySpecification(qrySpec, subQry);

                whereTerm.Sql = subQry.ToString();
            }
            else
            {
                throw new NotImplementedException($"QuerySpecification {existsPredicate.Subquery.QueryExpression.GetType().Name} not supported");
            }

            return(whereTerm);
        }
        public void MatchesPredicate_Constructor_SetsCaseSensitivity()
        {
            var fields    = new TestPredicateFields();
            var predicate = new ExistsPredicate <TestPredicateFields>(fields, isCaseSensitive: true);

            Assert.IsTrue(predicate.IsCaseSensitive);
        }
 public QsiInvokeExpressionNode VisitExistsPredicate(ExistsPredicate existsPredicate)
 {
     return(TreeHelper.Create <QsiInvokeExpressionNode>(n =>
     {
         n.Member.SetValue(TreeHelper.CreateFunction(SqlServerKnownFunction.Exists));
         n.Parameters.Add(VisitScalarSubquery(existsPredicate.Subquery));
     }));
 }
Exemple #5
0
        public override void Visit(ExistsPredicate node)
        {
            // count select star expressions in predicate
            var childVisitor = new ChildVisitor();

            node.AcceptChildren(childVisitor);
            expressionCounter += childVisitor.SelectStarExpressionCount;
        }
        /// <summary>
        /// This is a helper method that generates an if statement that checks the batches executed
        /// table to see if the current batch has been executed.  The if statement will look like this
        ///
        /// if not exists(select 1 from [tempdb].[dbo].[$(CompletedBatches)]
        ///                where BatchId = batchId)
        /// begin
        /// end
        /// </summary>
        /// <param name="batchId"></param>
        /// <returns></returns>
        private static IfStatement CreateIfNotExecutedStatement(int batchId)
        {
            // Create the exists/select statement
            ExistsPredicate existsExp = new ExistsPredicate();
            ScalarSubquery  subQuery  = new ScalarSubquery();

            existsExp.Subquery = subQuery;

            subQuery.QueryExpression = new QuerySpecification
            {
                SelectElements =
                {
                    new SelectScalarExpression  {
                        Expression = new IntegerLiteral{
                            Value = "1"
                        }
                    }
                },
                FromClause = new FromClause
                {
                    TableReferences =
                    {
                        new NamedTableReference()
                        {
                            SchemaObject = CreateCompletedBatchesName()
                        }
                    }
                },
                WhereClause = new WhereClause
                {
                    SearchCondition = new BooleanComparisonExpression
                    {
                        ComparisonType  = BooleanComparisonType.Equals,
                        FirstExpression = new ColumnReferenceExpression
                        {
                            MultiPartIdentifier = new MultiPartIdentifier
                            {
                                Identifiers = { CreateIdentifier(BatchIdColumnName, QuoteType.SquareBracket) }
                            }
                        },
                        SecondExpression = new IntegerLiteral {
                            Value = batchId.ToString()
                        }
                    }
                }
            };

            // Put together the rest of the statement
            IfStatement ifNotExists = new IfStatement
            {
                Predicate = new BooleanNotExpression
                {
                    Expression = existsExp
                }
            };

            return(ifNotExists);
        }
        public void MatchesPredicate_Constructor_SetsJsonPathSelector()
        {
            var expectedJsonPathSelector = new JsonPathSelector("$..title");

            var fields    = new TestPredicateFields();
            var predicate = new ExistsPredicate <TestPredicateFields>(fields, jsonpath: expectedJsonPathSelector);

            Assert.AreEqual(expectedJsonPathSelector, predicate.JsonPathSelector);
        }
        public void MatchesPredicate_Constructor_SetsExceptExpression()
        {
            const string expectedExceptRegex = "!$";

            var fields    = new TestPredicateFields();
            var predicate = new ExistsPredicate <TestPredicateFields>(fields, exceptExpression: expectedExceptRegex);

            Assert.AreEqual(expectedExceptRegex, predicate.ExceptExpression);
        }
        public void MatchesPredicate_Constructor_SetsXpathSelector()
        {
            var expectedXPathSelector = new XPathSelector("!$");

            var fields    = new TestPredicateFields();
            var predicate = new ExistsPredicate <TestPredicateFields>(fields, xpath: expectedXPathSelector);

            Assert.AreEqual(expectedXPathSelector, predicate.XPathSelector);
        }
Exemple #10
0
        public override void Visit(ExistsPredicate exists)
        {
            var querySpecification = exists?.Subquery?.QueryExpression as QuerySpecification;

            if (querySpecification != null)
            {
                ProcessTableReferences(querySpecification?.FromClause?.TableReferences, SqlAction.Select);
            }
        }
        public void GetSqlShouldThrowsExceptionIfMapperIsNull()
        {
            var predicate  = new ExistsPredicate <TestEntity>();
            var dictionary = new Dictionary <string, object>();

            var sqlGenerator = new Mock <ISqlGenerator>();

            sqlGenerator.SetupGet(x => x.Configuration)
            .Returns(new Mock <IDapperExtensionsConfiguration>().Object);

            Assert.Throws <InvalidOperationException>(() =>
            {
                var sql = predicate.GetSql(sqlGenerator.Object, dictionary);
            });
        }
        public void GetSql()
        {
            var predicate = new ExistsPredicate <TestEntity>()
            {
                Predicate = new FieldPredicate <TestEntity>()
                {
                    PropertyName = "Id",
                    Value        = 2,
                    Operator     = Operator.Eq,
                }
            };
            var dictionary = new Dictionary <string, object>();
            var sql        = predicate.GetSql(SqlHelper.GetSqlGenerator(), dictionary);

            Assert.Equal("(EXISTS (SELECT 1 FROM \"TestEntity\" WHERE (Id = @Id_0)))", sql);
            Assert.Equal(2, dictionary["@Id_0"]);
        }
Exemple #13
0
            public void ExistsPredicate_ReturnsProperSql()
            {
                var pred = new ExistsPredicate <PredicateTestEntity2>
                {
                    Predicate = new PropertyPredicate <PredicateTestEntity, PredicateTestEntity2>
                    {
                        PropertyName  = "Id",
                        PropertyName2 = "Key",
                        Not           = false,
                        Operator      = Operator.Eq
                    }
                };

                Dictionary <string, object> parameters = new Dictionary <string, object>();
                string result = pred.GetSql(parameters);

                Assert.AreEqual(
                    "(EXISTS (SELECT 1 FROM [PredicateTestEntity2] WHERE ([PredicateTestEntity].[Id] = [PredicateTestEntity2].[Key])))",
                    result);
                Assert.AreEqual(0, parameters.Count);
            }
            public void ExistsPredicateWithNot_ReturnsProperSql()
            {
                var pred = new ExistsPredicate<PredicateTestEntity2>
                               {
                                   Not = true,
                                   Predicate = new PropertyPredicate<PredicateTestEntity, PredicateTestEntity2>
                                                   {
                                                       PropertyName = "Id",
                                                       PropertyName2 = "Key",
                                                       Not = false,
                                                       Operator = Operator.Eq
                                                   }
                               };

                Dictionary<string, object> parameters = new Dictionary<string, object>();
                string result = pred.GetSql(parameters);
                Assert.AreEqual(
                    "(NOT EXISTS (SELECT 1 FROM [PredicateTestEntity2] WHERE ([PredicateTestEntity].[Id] = [PredicateTestEntity2].[Key])))",
                    result);
                Assert.AreEqual(0, parameters.Count);
            }
Exemple #15
0
 public override void Visit(ExistsPredicate node) { this.action(node); }
Exemple #16
0
 public override void ExplicitVisit(ExistsPredicate node)
 {
     _buffer.Append("exists (");
     node.Subquery.Accept(this);
     _buffer.Append(")");
 }
 void IVisitor.VisitAfter(ExistsPredicate predicate)
 {
     this.ParentExists(predicate);
 }
 public void ProcessExistsPredicate(ExistsPredicate ExistsPredicate)
 {
     _smells.ProcessTsqlFragment(ExistsPredicate.Subquery);
 }
Exemple #19
0
		public void Visit(ExistsPredicate predicate)
		{
			_Query.Append("EXISTS ( ");
			predicate.SubQuery.Accept(this);
			_Query.Append(") ");
		}
Exemple #20
0
 public void ExistsPredicate(SqlFragment parent, ExistsPredicate existsPredicate)
 {
     this.Script.Append("EXISTS(");
     this.Script.AppendFragment(existsPredicate.SubQuery.FirstFragment, parent, this);
     this.Script.Append(")");
 }
 public override void ExplicitVisit(ExistsPredicate fragment)
 {
     _fragments.Add(fragment);
 }
 void IVisitor.VisitBefore(ExistsPredicate predicate)
 {
     this.ParentExists(predicate);
 }
Exemple #23
0
 public override void Visit(ExistsPredicate node)
 {
     base.Visit(node);
     ExistsSubqueries.Add(node);
 }