/home/martin/workspace/OpenStreetNav/src/sqllib/sqllib.cpp
Go to the documentation of this file.
00001 #include "sqllib.h"
00002 
00003 namespace sqllib
00004 {
00005 
00006 psql::Statement<psql::BindTypes<double, double, double, double>, psql::RetTypes<double, double, double, double, double, double, double, double, double, int, int> > get_toshow_edges_select(boost::property_tree::ptree const& entries, psql::Database& db, bool named, std::string name)
00007 {
00008     KeyValFilterTranslator tr("ST_X(ST_StartPoint(e.Location::geometry)), ST_Y(ST_StartPoint(e.Location::geometry)), ST_X(ST_EndPoint(e.Location::geometry)), ST_Y(ST_EndPoint(e.Location::geometry))",
00009                               "Edges e INNER JOIN WayAttributes a ON a.WayID = e.WayID",
00010                               "e.Location && ST_SetSRID(ST_MakeBox2D(ST_MakePoint($1, $2), ST_MakePoint($3, $4)), -1)",
00011                               "a",
00012                               std::vector<std::string> {"float8", "float8", "float8", "float8", "float8", "int", "int"},
00013                               "order by priority desc");
00014     auto cr = SqlCreatorFactory::create(tr.translate(entries));
00015     if (named)
00016         return psql::Statement<psql::BindTypes<double, double, double, double>, psql::RetTypes<double, double, double, double, double, double, double, double, double, int, int> >(name, cr->create_sql(), db);
00017     else
00018         return psql::Statement<psql::BindTypes<double, double, double, double>, psql::RetTypes<double, double, double, double, double, double, double, double, double, int, int> >(cr->create_sql(), db);
00019 }
00020 
00021 psql::Statement<psql::BindTypes<double, double, double, double>, psql::RetTypes<int64_t, double, double, double, double, double, int, int> > get_selected_edges_select(boost::property_tree::ptree const& entries, psql::Database& db, bool named, std::string name)
00022 {
00023     KeyValFilterTranslator tr("e.WayID",
00024                               "Edges e INNER JOIN WayAttributes a ON a.WayID = e.WayID",
00025                               "ST_Intersects(e.Location, ST_SetSRID(ST_MakeBox2D(ST_MakePoint($1, $2), ST_MakePoint($3, $4)), -1))",
00026                               "a",
00027                               std::vector<std::string> {"float8", "float8", "float8", "float8", "float8", "int", "int"},
00028                               "order by priority desc");
00029     auto cr = SqlCreatorFactory::create(tr.translate(entries));
00030     if (named)
00031         return psql::Statement<psql::BindTypes<double, double, double, double>, psql::RetTypes<int64_t, double, double, double, double, double, int, int> >(name, cr->create_sql(), db);
00032     else
00033         return psql::Statement<psql::BindTypes<double, double, double, double>, psql::RetTypes<int64_t, double, double, double, double, double, int, int> >(cr->create_sql(), db);
00034 }
00035 
00036 psql::Statement<psql::BindTypes<>, psql::RetTypes<int64_t, int64_t, double, double, int64_t, std::string, std::string, int> > get_decl_wayred_crs(boost::property_tree::ptree const& entries, psql::Database& db, bool named, std::string name)
00037 {
00038     KeyValFilterTranslator tr("wn.WayID as CurWayID, n.ID as NdID, ST_X(n.Location::geometry), ST_Y(n.Location::geometry), COALESCE(wn2.WayID, -1) AS CrossWayID, COALESCE(a2.Key, '') as CrossWayKey, COALESCE(a2.Value, ''), wn.SequenceNo as SeqNo",
00039                               "WayNodes wn INNER JOIN Nodes n ON wn.NodeID = n.ID INNER JOIN WayAttributes a ON a.WayID = wn.WayID LEFT JOIN WayNodes wn2 ON wn2.WayID != wn.WayID AND wn.NodeID = wn2.NodeID LEFT JOIN WayAttributes a2 ON a2.WayID = wn2.WayID",
00040                               "",
00041                               "a",
00042                               std::vector<std::string>(),
00043                               "order by CurWayID, SeqNo, NdID, CrossWayID, CrossWayKey");
00044     auto cr = SqlCreatorFactory::create(tr.translate(entries));
00045     if (named)
00046         return psql::Statement<psql::BindTypes<>, psql::RetTypes<int64_t, int64_t, double, double, int64_t, std::string, std::string, int> >(name, cr->create_sql(), db);
00047     else
00048         return psql::Statement<psql::BindTypes<>, psql::RetTypes<int64_t, int64_t, double, double, int64_t, std::string, std::string, int> >(cr->create_sql(), db);
00049 }
00050 
00051 }
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines