/home/martin/workspace/OpenStreetNav/src/test/sqllib2.cpp
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()
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines