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 }