- allow occi to compile with new changes in mapnik::sql_utils

- cache table_from_sql instead of recomputing on each query
This commit is contained in:
kunitoki 2011-11-15 14:04:58 +01:00
parent 12eafe8da2
commit ef27ecf1cb
2 changed files with 15 additions and 17 deletions

View file

@ -179,14 +179,15 @@ void occi_datasource::bind() const
} }
} }
std::string table_name = mapnik::table_from_sql(table_); // extract real table name
table_name_ = mapnik::sql_utils::table_from_sql(table_);
// get SRID and/or GEOMETRY_FIELD from metadata table only if we need to // get SRID and/or GEOMETRY_FIELD from metadata table only if we need to
if (! srid_initialized_ || geometry_field_ == "") if (! srid_initialized_ || geometry_field_ == "")
{ {
std::ostringstream s; std::ostringstream s;
s << "SELECT srid, column_name FROM " << METADATA_TABLE << " WHERE"; s << "SELECT srid, column_name FROM " << METADATA_TABLE << " WHERE";
s << " LOWER(table_name) = LOWER('" << table_name << "')"; s << " LOWER(table_name) = LOWER('" << table_name_ << "')";
if (geometry_field_ != "") if (geometry_field_ != "")
{ {
@ -227,7 +228,7 @@ void occi_datasource::bind() const
// get columns description // get columns description
{ {
std::ostringstream s; std::ostringstream s;
s << "SELECT " << fields_ << " FROM (" << table_name << ") WHERE rownum < 1"; s << "SELECT " << fields_ << " FROM (" << table_name_ << ") WHERE rownum < 1";
#ifdef MAPNIK_DEBUG #ifdef MAPNIK_DEBUG
std::clog << "OCCI Plugin: " << s.str() << std::endl; std::clog << "OCCI Plugin: " << s.str() << std::endl;
@ -408,16 +409,14 @@ box2d<double> occi_datasource::envelope() const
} }
else if (use_spatial_index_) else if (use_spatial_index_)
{ {
std::string table_name = mapnik::table_from_sql(table_);
std::ostringstream s; std::ostringstream s;
s << "SELECT dim.sdo_lb, dim.sdo_ub FROM "; s << "SELECT dim.sdo_lb, dim.sdo_ub FROM ";
s << METADATA_TABLE << " m, TABLE(m.diminfo) dim "; s << METADATA_TABLE << " m, TABLE(m.diminfo) dim ";
s << " WHERE LOWER(m.table_name) = LOWER('" << table_name << "') AND dim.sdo_dimname = 'X'"; s << " WHERE LOWER(m.table_name) = LOWER('" << table_name_ << "') AND dim.sdo_dimname = 'X'";
s << " UNION "; s << " UNION ";
s << "SELECT dim.sdo_lb, dim.sdo_ub FROM "; s << "SELECT dim.sdo_lb, dim.sdo_ub FROM ";
s << METADATA_TABLE << " m, TABLE(m.diminfo) dim "; s << METADATA_TABLE << " m, TABLE(m.diminfo) dim ";
s << " WHERE LOWER(m.table_name) = LOWER('" << table_name << "') AND dim.sdo_dimname = 'Y'"; s << " WHERE LOWER(m.table_name) = LOWER('" << table_name_ << "') AND dim.sdo_dimname = 'Y'";
#ifdef MAPNIK_DEBUG #ifdef MAPNIK_DEBUG
std::clog << "OCCI Plugin: " << s.str() << std::endl; std::clog << "OCCI Plugin: " << s.str() << std::endl;
@ -503,7 +502,6 @@ featureset_ptr occi_datasource::features(query const& q) const
s << " FROM "; s << " FROM ";
std::string query(table_); std::string query(table_);
std::string table_name = mapnik::table_from_sql(query);
if (use_spatial_index_) if (use_spatial_index_)
{ {
@ -520,9 +518,9 @@ featureset_ptr occi_datasource::features(query const& q) const
{ {
boost::algorithm::ireplace_first(query, "WHERE", spatial_sql.str() + " AND "); boost::algorithm::ireplace_first(query, "WHERE", spatial_sql.str() + " AND ");
} }
else if (boost::algorithm::ifind_first(query, table_name)) else if (boost::algorithm::ifind_first(query, table_name_))
{ {
boost::algorithm::ireplace_first(query, table_name, table_name + " " + spatial_sql.str()); boost::algorithm::ireplace_first(query, table_name_, table_name_ + " " + spatial_sql.str());
} }
else else
{ {
@ -540,9 +538,9 @@ featureset_ptr occi_datasource::features(query const& q) const
{ {
boost::algorithm::ireplace_first(query, "WHERE", row_limit_string + " AND "); boost::algorithm::ireplace_first(query, "WHERE", row_limit_string + " AND ");
} }
else if (boost::algorithm::ifind_first(query, table_name)) else if (boost::algorithm::ifind_first(query, table_name_))
{ {
boost::algorithm::ireplace_first(query, table_name, table_name + " " + row_limit_string); boost::algorithm::ireplace_first(query, table_name_, table_name_ + " " + row_limit_string);
} }
else else
{ {
@ -587,7 +585,6 @@ featureset_ptr occi_datasource::features_at_point(coord2d const& pt) const
s << " FROM "; s << " FROM ";
std::string query(table_); std::string query(table_);
std::string table_name = mapnik::table_from_sql(query);
if (use_spatial_index_) if (use_spatial_index_)
{ {
@ -603,9 +600,9 @@ featureset_ptr occi_datasource::features_at_point(coord2d const& pt) const
{ {
boost::algorithm::ireplace_first(query, "WHERE", spatial_sql.str() + " AND "); boost::algorithm::ireplace_first(query, "WHERE", spatial_sql.str() + " AND ");
} }
else if (boost::algorithm::ifind_first(query, table_name)) else if (boost::algorithm::ifind_first(query, table_name_))
{ {
boost::algorithm::ireplace_first(query, table_name, table_name + " " + spatial_sql.str()); boost::algorithm::ireplace_first(query, table_name_, table_name_ + " " + spatial_sql.str());
} }
else else
{ {
@ -623,9 +620,9 @@ featureset_ptr occi_datasource::features_at_point(coord2d const& pt) const
{ {
boost::algorithm::ireplace_first(query, "WHERE", row_limit_string + " AND "); boost::algorithm::ireplace_first(query, "WHERE", row_limit_string + " AND ");
} }
else if (boost::algorithm::ifind_first(query, table_name)) else if (boost::algorithm::ifind_first(query, table_name_))
{ {
boost::algorithm::ireplace_first(query, table_name, table_name + " " + row_limit_string); boost::algorithm::ireplace_first(query, table_name_, table_name_ + " " + row_limit_string);
} }
else else
{ {

View file

@ -51,6 +51,7 @@ public:
private: private:
int type_; int type_;
mutable std::string table_; mutable std::string table_;
mutable std::string table_name_;
mutable std::string fields_; mutable std::string fields_;
mutable std::string geometry_field_; mutable std::string geometry_field_;
mutable int srid_; mutable int srid_;