예제 #1
0
        public void ThrowExceptionIfFieldIsIgnoreInlineMerge()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfFieldIsIgnoreInlineMergeClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field3" });
            var qualifiers       = Field.From(new[] { "Field1" });

            // Act/Assert
            Assert.Throws <InvalidOperationException>(() => statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers));
        }
예제 #2
0
        public void ThrowExceptionIfTheQualifiersAreNullWithoutPrimaryKey()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfTheQualifiersAreNullWithoutPrimaryKeyClass>();
            var fields           = Field.From(new[] { "Field1" });
            var qualifiers       = (IEnumerable <Field>)null;

            // Act/Assert
            Assert.Throws <NullReferenceException>(() => statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers));
        }
예제 #3
0
        public void ThrowExceptionIfAQualifierFieldIsNotPresentAtDataEntityFieldMapping()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfAQualifierFieldIsNotPresentAtDataEntityFieldMappingClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field4" });
            var qualifiers       = Field.From(new[] { "Field1", "Field3" });

            // Act/Assert
            Assert.Throws <InvalidOperationException>(() => statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers));
        }
예제 #4
0
        public void ThrowExceptionIfTheQualifiersContainsAnIgnoreInlineMergeFields()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfTheQualifiersContainsAnIgnoreInlineMergeFieldsClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field4" });
            var qualifiers       = Field.From(new[] { "Field1", "Field3" });

            // Act/Assert
            statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
        }
예제 #5
0
        public void ThrowExceptionIfNoQualifiersAndNoPrimaryFieldDefined()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfNoQualifiersAndNoPrimaryFieldDefinedClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field3" });
            var qualifiers       = (IEnumerable <Field>)null;

            // Act/Assert
            Assert.Throws <NullReferenceException>(() => statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers));
        }
예제 #6
0
        public void ThrowExceptionIfAQualifierFieldIsNotPresentAtDataEntity()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfAQualifierFieldIsNotPresentAtDataEntityClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field3" });
            var qualifiers       = Field.From(new[] { "Field1", "Field4" });

            // Act/Assert
            statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
        }
예제 #7
0
        public void ThrowExceptionIfTheFieldsAreNull()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfTheFieldsAreNullClass>();
            var fields           = (IEnumerable <Field>)null;
            var qualifiers       = Field.From(new[] { "Field1" });

            // Act/Assert
            statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
        }
예제 #8
0
        public void ThrowExceptionIfAnIdentityFieldIsNotAPrimaryField()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <ThrowExceptionIfAnIdentityFieldIsNotAPrimaryFieldClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field3" });
            var qualifiers       = Field.From(new[] { "Field1" });

            // Act/Assert
            statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
        }
예제 #9
0
        public void TestWithOverrideIgnoreFromUpdate()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <TestWithOverrideIgnoreFromUpdateClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field3" });
            var qualifiers       = Field.From(new[] { "Field1" });

            // Act
            var actual   = statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers, true);
            var expected = $"" +
                           $"MERGE [TestWithOverrideIgnoreFromUpdateClass] AS T " +
                           $"USING ( SELECT @Field1 AS [Field1], @Field2 AS [Field2], @Field3 AS [Field3] ) " +
                           $"AS S ON ( S.[Field1] = T.[Field1] ) " +
                           $"WHEN NOT MATCHED THEN " +
                           $"INSERT ( [Field1], [Field2], [Field3] ) " +
                           $"VALUES ( S.[Field1], S.[Field2], S.[Field3] ) " +
                           $"WHEN MATCHED THEN " +
                           $"UPDATE SET [Field1] = S.[Field1], [Field2] = S.[Field2], [Field3] = S.[Field3] ;";

            // Assert
            Assert.AreEqual(expected, actual);
        }
예제 #10
0
        public void TestWithClassMappingIdField()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <TestWithClassMappingIdFieldClass>();
            var fields           = Field.From(new[] { "ClassNameId", "Field2", "Field3" });
            var qualifiers       = (IEnumerable <Field>)null;

            // Act
            var actual   = statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
            var expected = $"" +
                           $"MERGE [ClassName] AS T " +
                           $"USING ( SELECT @ClassNameId AS [ClassNameId], @Field2 AS [Field2], @Field3 AS [Field3] ) " +
                           $"AS S ON ( S.[ClassNameId] = T.[ClassNameId] ) " +
                           $"WHEN NOT MATCHED THEN " +
                           $"INSERT ( [ClassNameId], [Field2], [Field3] ) " +
                           $"VALUES ( S.[ClassNameId], S.[Field2], S.[Field3] ) " +
                           $"WHEN MATCHED THEN " +
                           $"UPDATE SET [Field2] = S.[Field2], [Field3] = S.[Field3] ;";

            // Assert
            Assert.AreEqual(expected, actual);
        }
예제 #11
0
        public void TestCreateInlineMergeWithPrimaryKey()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <TestCreateInlineMergeWithPrimaryKeyClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field3" });
            var qualifiers       = (IEnumerable <Field>)null;

            // Act
            var actual   = statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
            var expected = $"" +
                           $"MERGE [TestCreateInlineMergeWithPrimaryKeyClass] AS T " +
                           $"USING ( SELECT @Field1 AS [Field1], @Field2 AS [Field2], @Field3 AS [Field3] ) " +
                           $"AS S ON ( S.[Field1] = T.[Field1] ) " +
                           $"WHEN NOT MATCHED THEN " +
                           $"INSERT ( [Field1], [Field2], [Field3] ) " +
                           $"VALUES ( @Field1, @Field2, @Field3 ) " +
                           $"WHEN MATCHED THEN " +
                           $"UPDATE SET [Field2] = S.[Field2], [Field3] = S.[Field3] ;";

            // Assert
            Assert.AreEqual(expected, actual);
        }
예제 #12
0
        public void TestCreateInlineMergeWithAttributeMappings()
        {
            // Setup
            var statementBuilder = new SqlDbStatementBuilder();
            var queryBuilder     = new QueryBuilder <TestCreateInlineMergeWithAttributeMappingsClass>();
            var fields           = Field.From(new[] { "Field1", "Field2", "Field4" });
            var qualifiers       = Field.From(new[] { "Field1", "Field2" });

            // Act
            var actual   = statementBuilder.CreateInlineMerge(queryBuilder, fields, qualifiers);
            var expected = $"" +
                           $"MERGE [TestCreateInlineMergeWithAttributeMappingsClass] AS T " +
                           $"USING ( SELECT @Field1 AS [Field1], @Field2 AS [Field2], @Field4 AS [Field4] ) " +
                           $"AS S ON ( S.[Field1] = T.[Field1] AND S.[Field2] = T.[Field2] ) " +
                           $"WHEN NOT MATCHED THEN " +
                           $"INSERT ( [Field1], [Field2], [Field4] ) " +
                           $"VALUES ( @Field1, @Field2, @Field4 ) " +
                           $"WHEN MATCHED THEN " +
                           $"UPDATE SET [Field1] = S.[Field1], [Field2] = S.[Field2], [Field4] = S.[Field4] ;";

            // Assert
            Assert.AreEqual(expected, actual);
        }