358 lines
7.5 KiB
C#
358 lines
7.5 KiB
C#
using Strata.SqlTools.Statements.PostgreSql;
|
|
|
|
namespace Strata.SqlTools.SqlBreakdown.Tests.PostgreSql;
|
|
|
|
[TestFixture]
|
|
public class StatementExpressionParserTests
|
|
{
|
|
[Test]
|
|
public void Parse_NumberExpression_ReturnNum()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "42";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_NegativeNumber_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "-42";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_DecimalNumber_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "3.14159";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_StringExpression_ReturnsString()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "'hello world'";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_StringWithEscapedQuotes_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "'it''s working'"; // PostgreSQL escape style
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_ColumnIdentifier_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "user_id";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_QuotedIdentifier_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "\"UserId\"";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_ColumnWithTablePrefix_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "users.id";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_QuotedColumnWithTablePrefix_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "\"Users\".\"Id\"";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_SimpleAddition_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "42 + 8";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_SimpleSubtraction_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "42 - 8";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_SimpleMultiplication_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "42 * 8";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_SimpleDivision_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "42 / 8";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_ComplexArithmeticExpression_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "(42 + 8) * (10 - 2) / 4";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_FunctionCall_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "COUNT(id)";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_CountExpression_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "COUNT(*)";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_SumExpression_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "SUM(amount)";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_CaseInsensitiveFunctionName_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "sum(amount)";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_FunctionWithMultipleArguments_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "SUBSTRING(name, 1, 10)";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_NestedFunctionCalls_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "UPPER(SUBSTRING(name, 1, 10))";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_ColumnWithAlias_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "COUNT(id) AS total_count";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_CaseExpression_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "CASE WHEN status = 'active' THEN 1 ELSE 0 END";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_PostgreSqlPositionalParameter_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "$1";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_NamedParameter_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = "@userId";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_ColonNamedParameter_Succeeds()
|
|
{
|
|
// Arrange
|
|
var parser = new StatementExpressionParser();
|
|
var sql = ":userId";
|
|
|
|
// Act
|
|
var result = parser.Parse(sql);
|
|
|
|
// Assert
|
|
Assert.That(result, Is.Not.Null);
|
|
}
|
|
}
|