public void VisitBinaryExpression_ExclusiveOr_OnBooleans()
        {
            var binaryExpression      = Expression.ExclusiveOr(_trueExpression, _falseExpression);
            var expectedXorSimulation = Expression.OrElse(
                Expression.AndAlso(_trueExpression, Expression.Not(_falseExpression)),
                Expression.AndAlso(Expression.Not(_trueExpression), _falseExpression));

            _expressionVisitorMock
            .Expect(mock => mock.Visit(Arg <Expression> .Matches(expr => expr is BinaryExpression)))
            .WhenCalled(mi =>
            {
                var expr = (BinaryExpression)mi.Arguments[0];
                SqlExpressionTreeComparer.CheckAreEqualTrees(expr, expectedXorSimulation);
                _commandBuilder.Append("XOR SIMULATION");
            })
            .Return(null);

            _generator.GenerateSqlForBinaryExpression(binaryExpression);

            _expressionVisitorMock.VerifyAllExpectations();

            var result = _commandBuilder.GetCommandText();

            Assert.That(result, Is.EqualTo("XOR SIMULATION"));
        }
        /// <inheritdoc />
        public override SqlCommand MakeCreateTempTableCommand(TableSchema tableSchema)
        {
            EnsureValidSchemaForTempTables(tableSchema);

            var sql = new SqlCommandBuilder("CREATE TABLE ").Append(tableSchema.Name).AppendLine();

            sql.AppendLine("(");

            var isFirst = true;

            foreach (var column in tableSchema.Columns)
            {
                if (!isFirst)
                {
                    sql.AppendLine(",");
                }

                sql.Append(new string(' ', 4));
                sql.Append(column.ColumnName);
                sql.Append(" ").Append(GetColumnType(column));

                isFirst = false;
            }

            sql.AppendLine();
            sql.Append(");");
            return(sql.ToCommand(null));
        }
Beispiel #3
0
        /// <summary>
        /// Appends a list of properties in the form of @ParameterName, @ParameterName ...
        /// </summary>
        public static SqlCommandBuilder AppendParameterNames(
            this SqlCommandBuilder sql,
            ImmutableArray <ColumnSchema> properties,
            Func <ColumnSchema, bool> include)
        {
            var isFirst = true;

            // ReSharper disable once ForCanBeConvertedToForeach
            // PERF: This method can be called in a very tight loop so should be as fast as possible
            for (var i = 0; i < properties.Length; i++)
            {
                var property = properties[i];
                if (!include(property))
                {
                    continue;
                }

                if (!isFirst)
                {
                    sql.Append(", ");
                }

                sql.Append("@").Append(property.ParameterName);
                isFirst = false;
            }

            return(sql);
        }
Beispiel #4
0
        /// <summary>
        /// Appends a SQL clause which lists all the properties and their aliases.
        /// </summary>
        public static SqlCommandBuilder AppendSelectPropertiesClause(
            this SqlCommandBuilder sql,
            ImmutableArray <ColumnSchema> properties)
        {
            var isFirst = true;

            // ReSharper disable once ForCanBeConvertedToForeach
            // PERF: This method can be called in a very tight loop so should be as fast as possible
            for (var i = 0; i < properties.Length; i++)
            {
                var property = properties[i];

                if (!isFirst)
                {
                    sql.Append(", ");
                }

                sql.Append(property.ColumnName);

                if (!string.Equals(property.ColumnName, property.SelectName, StringComparison.OrdinalIgnoreCase))
                {
                    sql.Append(" AS " + property.SelectName);
                }

                isFirst = false;
            }

            return(sql);
        }
Beispiel #5
0
        /// <inheritdoc />
        public override SqlCommand MakeCreateTempTableCommand(TableSchema tableSchema)
        {
            if (tableSchema.Columns.IsEmpty)
            {
                throw new ArgumentException("Temporary tables must have columns");
            }

            var sql = new SqlCommandBuilder("CREATE TEMP TABLE ").Append(tableSchema.Name).AppendLine();

            sql.AppendLine("(");

            var isFirst = true;

            foreach (var column in tableSchema.Columns)
            {
                if (!isFirst)
                {
                    sql.AppendLine(",");
                }

                sql.Append(new string(' ', 4));
                sql.Append(column.ColumnName);
                sql.Append(" ").Append(GetColumnType(column));

                isFirst = false;
            }

            sql.AppendLine();
            sql.Append(")");
            return(sql.ToCommand(null));
        }
Beispiel #6
0
        public void GenerateTextForTopExpression()
        {
            var sqlStatement =
                new SqlStatementBuilder
            {
                DataInfo = new TestStreamedValueInfo(typeof(int)), SelectProjection = _entityExpression, TopExpression = Expression.Constant(5)
            }.
            GetSqlStatement();

            var stageMock = MockRepository.GeneratePartialMock <DefaultSqlGenerationStage>();

            stageMock
            .Expect(mock => CallGenerateTextForNonSelectExpression(mock, sqlStatement.TopExpression))
            .WhenCalled(c => _commandBuilder.Append("test"));
            stageMock.Replay();

            stageMock.GenerateTextForTopExpression(_commandBuilder, sqlStatement.TopExpression);

            stageMock.VerifyAllExpectations();
            Assert.That(_commandBuilder.GetCommandText(), Is.EqualTo("test"));
        }
        public void SetUp()
        {
            _commandBuilder = new SqlCommandBuilder();

            _expressionVisitorMock = MockRepository.GenerateStrictMock <ExpressionVisitor>();

            _leftIntegerExpression = Expression.Constant(1);
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_leftIntegerExpression))
            .WhenCalled(mi => _commandBuilder.Append("left"))
            .Return(_leftIntegerExpression);

            _rightIntegerExpression = Expression.Constant(2);
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_rightIntegerExpression))
            .WhenCalled(mi => _commandBuilder.Append("right"))
            .Return(_rightIntegerExpression);

            _leftDoubleExpression = Expression.Constant(1D);
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_leftDoubleExpression))
            .WhenCalled(mi => _commandBuilder.Append("leftDouble"))
            .Return(_leftDoubleExpression);

            _rightDoubleExpression = Expression.Constant(2D);
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_rightDoubleExpression))
            .WhenCalled(mi => _commandBuilder.Append("rightDouble"))
            .Return(_rightDoubleExpression);

            _leftStringExpression = Expression.Constant("Left");
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_leftStringExpression))
            .WhenCalled(mi => _commandBuilder.Append("leftString"))
            .Return(_leftStringExpression);

            _rightStringExpression = Expression.Constant("Right");
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_rightStringExpression))
            .WhenCalled(mi => _commandBuilder.Append("rightString"))
            .Return(_rightStringExpression);

            _nullExpression = Expression.Constant(null, typeof(string));
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_nullExpression))
            .WhenCalled(mi => _commandBuilder.Append("NULL"))
            .Return(_rightStringExpression);

            _trueExpression = Expression.Constant(true);
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_trueExpression))
            .WhenCalled(mi => _commandBuilder.Append("true"))
            .Return(_trueExpression);

            _falseExpression = Expression.Constant(false);
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_falseExpression))
            .WhenCalled(mi => _commandBuilder.Append("false"))
            .Return(_falseExpression);

            _nullableTrueExpression = Expression.Constant(true, typeof(bool?));
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_nullableTrueExpression))
            .WhenCalled(mi => _commandBuilder.Append("true"))
            .Return(_nullableTrueExpression);

            _nullableFalseExpression = Expression.Constant(false, typeof(bool?));
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_nullableFalseExpression))
            .WhenCalled(mi => _commandBuilder.Append("false"))
            .Return(_nullableFalseExpression);

            _sqlEntityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression(typeof(Cook));
            _expressionVisitorMock
            .Stub(stub => stub.Visit(_sqlEntityExpression))
            .WhenCalled(mi => _commandBuilder.Append("[c].[ID]"))
            .Return(((SqlEntityExpression)_sqlEntityExpression).GetIdentityExpression());

            _generator = new BinaryExpressionTextGenerator(_commandBuilder, _expressionVisitorMock);
        }
        public void GetCommandText()
        {
            _sqlCommandBuilder.Append("Test");

            Assert.That(_sqlCommandBuilder.GetCommandText(), Is.EqualTo("Test"));
        }
    public void SetUp ()
    {
      _commandBuilder = new SqlCommandBuilder();

      _expressionVisitorMock = MockRepository.GenerateStrictMock<ExpressionTreeVisitor>();

      _leftIntegerExpression = Expression.Constant (1);
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_leftIntegerExpression))
          .WhenCalled (mi => _commandBuilder.Append ("left"))
          .Return (_leftIntegerExpression);

      _rightIntegerExpression = Expression.Constant (2);
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_rightIntegerExpression))
          .WhenCalled (mi => _commandBuilder.Append ("right"))
          .Return (_rightIntegerExpression);

      _leftDoubleExpression = Expression.Constant (1D);
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_leftDoubleExpression))
          .WhenCalled (mi => _commandBuilder.Append ("leftDouble"))
          .Return (_leftDoubleExpression);

      _rightDoubleExpression = Expression.Constant (2D);
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_rightDoubleExpression))
          .WhenCalled (mi => _commandBuilder.Append ("rightDouble"))
          .Return (_rightDoubleExpression);

      _leftStringExpression = Expression.Constant ("Left");
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_leftStringExpression))
          .WhenCalled (mi => _commandBuilder.Append ("leftString"))
          .Return (_leftStringExpression);

      _rightStringExpression = Expression.Constant ("Right");
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_rightStringExpression))
          .WhenCalled (mi => _commandBuilder.Append ("rightString"))
          .Return (_rightStringExpression);

      _nullExpression = Expression.Constant (null, typeof (string));
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_nullExpression))
          .WhenCalled (mi => _commandBuilder.Append ("NULL"))
          .Return (_rightStringExpression);

      _trueExpression = Expression.Constant (true);
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_trueExpression))
          .WhenCalled (mi => _commandBuilder.Append ("true"))
          .Return (_trueExpression);

      _falseExpression = Expression.Constant (false);
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_falseExpression))
          .WhenCalled (mi => _commandBuilder.Append ("false"))
          .Return (_falseExpression);

      _nullableTrueExpression = Expression.Constant (true, typeof (bool?));
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_nullableTrueExpression))
          .WhenCalled (mi => _commandBuilder.Append ("true"))
          .Return (_nullableTrueExpression);

      _nullableFalseExpression = Expression.Constant (false, typeof (bool?));
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_nullableFalseExpression))
          .WhenCalled (mi => _commandBuilder.Append ("false"))
          .Return (_nullableFalseExpression);

      _sqlEntityExpression = SqlStatementModelObjectMother.CreateSqlEntityDefinitionExpression (typeof (Cook));
      _expressionVisitorMock
          .Stub (stub => stub.VisitExpression (_sqlEntityExpression))
          .WhenCalled (mi => _commandBuilder.Append ("[c].[ID]"))
          .Return (((SqlEntityExpression) _sqlEntityExpression).GetIdentityExpression());

      _generator = new BinaryExpressionTextGenerator (_commandBuilder, _expressionVisitorMock);
    }