Go to the documentation of this file.00001 #include <boost/test/unit_test.hpp>
00002 #include <boost/property_tree/xml_parser.hpp>
00003 #include <boost/regex.hpp>
00004 #include "../sqllib/sqllib.h"
00005
00006 BOOST_AUTO_TEST_SUITE(sqllib2)
00007
00008 BOOST_AUTO_TEST_CASE(sqlcreator)
00009 {
00010 boost::property_tree::ptree properties;
00011 std::istringstream ss("<type>intersect</type><children><child><type>simple</type><query>aaa</query></child><child><type>simple</type><query>bbb</query></child></children><ending>end</ending>");
00012 boost::property_tree::xml_parser::read_xml(ss, properties);
00013 auto creat = sqllib::SqlCreatorFactory::create(properties);
00014 boost::regex r("\\s*\\(?aaa\\)?\\s+intersect\\s+\\(?bbb\\)?\\s+end\\s*", boost::regex_constants::icase);
00015 BOOST_CHECK(boost::regex_match(creat->create_sql(), r));
00016 }
00017
00018 BOOST_AUTO_TEST_CASE(kvtrans)
00019 {
00020 sqllib::KeyValFilterTranslator tr("a.col1", "Test t, Abc a", "t.a=a.a", "t", std::vector<std::string> {"asdf"}, "order by a");
00021 boost::property_tree::ptree entries;
00022 std::istringstream ss("<entries><entry><add><a>asdf</a></add><elements><el><key>aaa</key><value>bbb</value></el><el><key>aaaa</key><value>bbbb</value></el></elements></entry><entry><add><a>asdfasdf</a></add><elements><el><key>ccc</key><value>ddd</value></el></elements></entry></entries>");
00023 boost::property_tree::xml_parser::read_xml(ss, entries);
00024 auto ret = tr.translate(entries);
00025 auto creat = sqllib::SqlCreatorFactory::create(ret);
00026 boost::regex r("\\s*\\(?\\s*\\(?select\\s+a.col1\\s*,\\s*asdf::asdf\\s+as\\s+a\\s+from\\s+Test t, Abc a\\s+where\\s+t.a=a.a\\s+and\\s+t.key\\s*=\\s*'aaa'\\s+and\\s+t.value\\s*=\\s*'bbb'\\s*\\)?\\s*intersect\\s*\\(?select\\s+a.col1\\s*,\\s*asdf::asdf\\s+as\\s+a\\s+from\\s+Test t, Abc a\\s+where\\s+t.a=a.a\\s+and\\s+t.key\\s*=\\s*'aaaa'\\s+and\\s+t.value\\s*=\\s*'bbbb'\\s*\\)?\\s*\\)?\\s*union\\s*\\(?\\s*\\(?select\\s+a.col1\\s*,\\s*asdfasdf::asdf\\s+as\\s+a\\s+from\\s+Test t, Abc a\\s+where\\s+t.a=a.a\\s+and\\s+t.key\\s*=\\s*'ccc'\\s+and\\s+t.value\\s*=\\s*'ddd'\\s*\\)?\\s*\\)?\\s+order\\s+by\\s+a\\s*", boost::regex_constants::icase);
00027 BOOST_CHECK(boost::regex_match(creat->create_sql(), r));
00028 }
00029
00030 BOOST_AUTO_TEST_CASE(kvtransast)
00031 {
00032 sqllib::KeyValFilterTranslator tr("a.col1", "Test t, Abc a", "", "t", std::vector<std::string> {"asdf"}, "order by a");
00033 boost::property_tree::ptree entries;
00034 std::istringstream ss("<entries><entry><add><a>asdf</a></add><elements><el><key>aaa</key><value>*</value></el><el><value>bbbb</value></el></elements></entry><entry><add><a>asdfasdf</a></add><elements><el></el></elements></entry></entries>");
00035 boost::property_tree::xml_parser::read_xml(ss, entries);
00036 auto ret = tr.translate(entries);
00037 auto creat = sqllib::SqlCreatorFactory::create(ret);
00038 boost::regex r("\\s*\\(?\\s*\\(?select\\s+a.col1\\s*,\\s*asdf::asdf\\s+as\\s+a\\s+from\\s+Test t, Abc a\\s+where\\s+t.key\\s*=\\s*'aaa'\\s*\\)?\\s*intersect\\s*\\(?select\\s+a.col1\\s*,\\s*asdf::asdf\\s+as\\s+a\\s+from\\s+Test t, Abc a\\s+where\\s+t.value\\s*=\\s*'bbbb'\\s*\\)?\\s*\\)?\\s*union\\s*\\(?\\s*\\(?select\\s+a.col1\\s*,\\s*asdfasdf::asdf\\s+as\\s+a\\s+from\\s+Test t, Abc a\\s*\\)?\\s*\\)?\\s+order\\s+by\\s+a\\s*", boost::regex_constants::icase);
00039 BOOST_CHECK(boost::regex_match(creat->create_sql(), r));
00040 }
00041
00042 BOOST_AUTO_TEST_CASE(kvtransempty)
00043 {
00044 sqllib::KeyValFilterTranslator tr("a.col1", "Test t, Abc a", "t.a=a.a", "t", std::vector<std::string> {"asdf"}, "order by a");
00045 boost::property_tree::ptree entries;
00046 std::istringstream ss("<entries></entries>");
00047 boost::property_tree::xml_parser::read_xml(ss, entries);
00048 auto ret = tr.translate(entries);
00049 auto creat = sqllib::SqlCreatorFactory::create(ret);
00050 boost::regex r("\\s*", boost::regex_constants::icase);
00051 BOOST_CHECK(boost::regex_match(creat->create_sql(), r));
00052 }
00053
00054
00055 BOOST_AUTO_TEST_SUITE_END()