blob: be1ceda5f77b9c45f4fb99f9b09aab8b65586cd3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <boost/test/unit_test.hpp>
#include "sql_test_suite_fixture.h"
using namespace ignite;
using namespace boost::unit_test;
BOOST_FIXTURE_TEST_SUITE(SqlValueExpressionTestSuite, ignite::SqlTestSuiteFixture)
BOOST_AUTO_TEST_CASE(TestCase)
{
TestType in;
in.i32Field = 82;
testCache.Put(1, in);
SqlTestSuiteFixture::CheckSingleResult<SQLINTEGER>(
"SELECT "
"CASE i32Field WHEN 82 "
"THEN (i32Field / 2) "
"ELSE (i32Field / 3) "
"END "
"FROM TestType", in.i32Field / 2);
SqlTestSuiteFixture::CheckSingleResult<SQLINTEGER>(
"SELECT "
"CASE i32Field WHEN 22 "
"THEN (i32Field / 2) "
"ELSE (i32Field / 3) "
"END "
"FROM TestType", in.i32Field / 3);
}
BOOST_AUTO_TEST_CASE(TestCast)
{
TestType in;
in.i32Field = 12345;
in.strField = "54321";
testCache.Put(1, in);
CheckSingleResult<SQLINTEGER>("SELECT CAST(strField AS INT) + i32Field FROM TestType",
common::LexicalCast<int32_t>(in.strField) + in.i32Field);
CheckSingleResult<std::string>("SELECT CAST(i32Field AS VARCHAR) || strField FROM TestType",
common::LexicalCast<std::string>(in.i32Field) + in.strField);
}
BOOST_AUTO_TEST_CASE(TestCoalesce)
{
CheckSingleResult<std::string>("SELECT COALESCE('One', 'Two', 'Three')", "One");
CheckSingleResult<std::string>("SELECT COALESCE(NULL, 'Two', 'Three')", "Two");
CheckSingleResult<std::string>("SELECT COALESCE(NULL, 'Two', NULL)", "Two");
CheckSingleResult<std::string>("SELECT COALESCE(NULL, NULL, 'Three')", "Three");
}
BOOST_AUTO_TEST_CASE(TestNullif)
{
TestType in;
in.strField = "SomeValue";
testCache.Put(1, in);
CheckSingleResult<std::string>("SELECT NULLIF(strField, 'blablabla') FROM TestType", in.strField);
CheckSingleResult<std::string>("SELECT NULLIF(strField, 'SomeValue') FROM TestType", "");
}
BOOST_AUTO_TEST_SUITE_END()