Skip to content
This repository has been archived by the owner on Jan 3, 2022. It is now read-only.

Commit

Permalink
Tests to the IF statement
Browse files Browse the repository at this point in the history
  • Loading branch information
tsutomi committed May 13, 2016
1 parent 852d253 commit 8691449
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;

using NUnit.Framework;

namespace Deveel.Data.Sql.Expressions {
[TestFixture]
public static class SqlConditionalExpressionTests {
[Test]
public static void SimpleCase() {
var first = SqlExpression.Constant(34);
var second = SqlExpression.Add(SqlExpression.Constant(10), SqlExpression.Constant(24));
var condition = SqlExpression.Equal(first, second);
var returnExpression = SqlExpression.Constant("It was equal");
var conditional = SqlExpression.Conditional(condition, returnExpression);

var result = conditional.EvaluateToConstant(null, null);

Assert.IsNotNull(result);
Assert.IsFalse(Field.IsNullField(result));
Assert.AreEqual("It was equal", result.Value.ToString());
}

[Test]
public static void SimpleCaseWithFalse() {
var first = SqlExpression.Constant(34);
var second = SqlExpression.Add(SqlExpression.Constant(10), SqlExpression.Constant(34));
var condition = SqlExpression.Equal(first, second);
var ifTrue = SqlExpression.Constant("It was equal");
var ifFalse = SqlExpression.Constant("It was not equal");

var conditional = SqlExpression.Conditional(condition, ifTrue, ifFalse);

var result = conditional.EvaluateToConstant(null, null);

Assert.IsNotNull(result);
Assert.IsFalse(Field.IsNullField(result));
Assert.AreEqual("It was not equal", result.Value.ToString());
}

[Test]
public static void CaseNestedFalse() {
var first = SqlExpression.Constant(34);
var second = SqlExpression.Add(SqlExpression.Constant(10), SqlExpression.Constant(34));
var condition = SqlExpression.Equal(first, second);
var ifTrue = SqlExpression.Constant("It was equal");
var ifFalseReturn = SqlExpression.Constant("It was not equal");
var ifFalse = SqlExpression.Conditional(SqlExpression.Constant(true), ifFalseReturn);

var conditional = SqlExpression.Conditional(condition, ifTrue, ifFalse);

var result = conditional.EvaluateToConstant(null, null);

Assert.IsNotNull(result);
Assert.IsFalse(Field.IsNullField(result));
Assert.AreEqual("It was not equal", result.Value.ToString());
}
}
}
40 changes: 40 additions & 0 deletions src/deveeldb-nunit/Deveel.Data/ConditionalTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System;

using Deveel.Data.Sql;
using Deveel.Data.Sql.Expressions;
using Deveel.Data.Sql.Statements;
using Deveel.Data.Sql.Types;
using Deveel.Data.Sql.Variables;

using NUnit.Framework;

namespace Deveel.Data {
[TestFixture]
public sealed class ConditionalTests : ContextBasedTest {
protected override void OnAfterSetup(string testName) {
Query.Access().CreateObject(new VariableInfo("a", PrimitiveTypes.Integer(), false) {
DefaultExpression = SqlExpression.Constant(34)
});

base.OnAfterSetup(testName);
}

protected override void OnBeforeTearDown(string testName) {
Query.Access().DropObject(DbObjectType.Variable, new ObjectName("a"));
base.OnBeforeTearDown(testName);
}

[Test]
public void SimpleConditional() {
var condition = SqlExpression.Equal(SqlExpression.VariableReference("a"), SqlExpression.Constant(34));
var ifTrue = new SqlStatement[] {
new DeclareVariableStatement("b", PrimitiveTypes.String()),
new AssignVariableStatement(SqlExpression.VariableReference("b"), SqlExpression.Constant(21)),
};

var result = Query.If(condition, ifTrue);

Assert.IsNotNull(result);
}
}
}
2 changes: 2 additions & 0 deletions src/deveeldb-nunit/deveeldb-nunit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@
<Compile Include="Deveel.Data.Sql.Compile\SchemaCompileTests.cs" />
<Compile Include="Deveel.Data.Sql.Compile\SqlCompileTestBase.cs" />
<Compile Include="Deveel.Data.Sql.Compile\UpdateTests.cs" />
<Compile Include="Deveel.Data.Sql.Expressions\SqlConditionalExpressionTests.cs" />
<Compile Include="Deveel.Data.Sql.Statements\SqlStringFormatTests.cs" />
<Compile Include="Deveel.Data.Sql.Tables\ColumnTests.cs" />
<Compile Include="Deveel.Data.Sql.Tables\RowIdTests.cs" />
Expand All @@ -149,6 +150,7 @@
<Compile Include="Deveel.Data\AssignTests.cs" />
<Compile Include="Deveel.Data\CallTests.cs" />
<Compile Include="Deveel.Data\CloseTests.cs" />
<Compile Include="Deveel.Data\ConditionalTests.cs" />
<Compile Include="Deveel.Data\ContextBasedTest.cs" />
<Compile Include="Deveel.Data\ConversionFunctionTests.cs" />
<Compile Include="Deveel.Data\CreateFunctionTests.cs" />
Expand Down
20 changes: 20 additions & 0 deletions src/deveeldb/Deveel.Data/RequestExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,26 @@ public static class RequestExtensions {

#endregion

#region If

public static ITable If(this IRequest request, SqlExpression condition, SqlStatement[] ifTrue) {
return If(request, condition, ifTrue, new SqlStatement[0]);
}

public static ITable If(this IRequest request, SqlExpression condition, SqlStatement[] ifTrue, SqlStatement[] ifFalse) {
var result = request.ExecuteStatement(new ConditionStatement(condition, ifTrue, ifFalse));

if (result.Type == StatementResultType.Exception)
throw result.Error;

if (result.Type == StatementResultType.Result)
return result.Result;

throw new NotSupportedException("Cursor-ref in condition not supported (yet).");
}

#endregion

#endregion
}
}

0 comments on commit 8691449

Please sign in to comment.