public void Optimize_PositiveNumber() { var ast = new SqlPrefixOperationNode { Operator = new SqlOperatorNode("+"), Right = new SqlNumberNode(5) }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlNumberNode(5)); }
public void Optimize_ConstantStringConcat() { // "A" + "B" => "AB" var ast = new SqlInfixOperationNode { Left = new SqlStringNode("A"), Operator = new SqlOperatorNode("+"), Right = new SqlStringNode("B") }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlStringNode("AB")); }
public void Optimize_CastStringToNumeric() { // CAST("123.45" as NUMERIC) => 123.45M var ast = new SqlCastNode { Expression = new SqlStringNode("123.45"), DataType = new SqlDataTypeNode { DataType = new SqlKeywordNode("NUMERIC") } }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlNumberNode(123.45M)); }
public void Optimize_CastStringToBigint() { // CAST("12345" as BIGINT) => 12345L var ast = new SqlCastNode { Expression = new SqlStringNode("12345"), DataType = new SqlDataTypeNode { DataType = new SqlKeywordNode("BIGINT") } }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlNumberNode(12345L)); }
public void Optimize_CastNumberToVarcharMax() { // CAST(5 as VARCHAR(MAX)) => "5" var ast = new SqlCastNode { Expression = new SqlNumberNode(5), DataType = new SqlDataTypeNode { DataType = new SqlKeywordNode("VARCHAR"), Size = new SqlKeywordNode("MAX") } }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlStringNode("5")); }
public void Optimize_CastStringToVarcharNoPadRight() { // CAST("12345" as VARCHAR(3)) => "123" var ast = new SqlCastNode { Expression = new SqlStringNode("ab"), DataType = new SqlDataTypeNode { DataType = new SqlKeywordNode("VARCHAR"), Size = new SqlNumberNode(4) } }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlStringNode("ab")); }
public void Optimize_AdditionMultiplicationConstants() { // 1 + 2 * 3 => 7 var ast = new SqlInfixOperationNode { Left = new SqlNumberNode(1), Operator = new SqlOperatorNode("+"), Right = new SqlInfixOperationNode { Left = new SqlNumberNode(2), Operator = new SqlOperatorNode("*"), Right = new SqlNumberNode(3) } }; var target = new ExpressionOptimizeVisitor(); var result = target.Visit(ast); result.Should().MatchAst(new SqlNumberNode(7)); }