string TeQuerierDB::sqlWhereRestrictions(TeRepresentation* rep) { TeKeys objs; string whereClause= " 1 = 1 "; TeDatabase* db = params_->theme()->layer()->database(); if(!db) return ""; // load the first representation if(!rep) rep = (params_->theme()->layer()->vectRepres())[0]; // spatial restriction with other geometry representation if (params_->hasSpatialRes() && rep) { if(params_->boxRest().isValid()) { TeBox b = params_->boxRest(); TeGeomRep gRep = rep->geomRep_; string geomTableRest = params_->theme()->layer()->tableName(params_->geomRepRest()); whereClause += " AND "+ db->getSQLBoxWhere(b, gRep, geomTableRest); } else if(params_->geomRest()) { string geomTableRest = params_->theme()->layer()->tableName(params_->geomRepRest()); TePrecision::instance().setPrecision(TeGetPrecision(params_->theme()->layer()->projection())); if((db->spatialRelation(geomTableRest, params_->geomRepRest(), params_->geomRest(), objs, params_->spatialRelation())) && (!objs.empty())) { string obs; for(unsigned int i=0; i<objs.size(); i++) { if(i!=0) obs += ","; obs += "'"+ objs[i] +"'"; } whereClause += " AND "+ rep->tableName_ +".object_id IN ("+ obs +")"; } else whereClause += " AND 1 <> 1 "; // no geometry was found } } //selected objects switch (params_->selectedObjs()) { case TeAll: break; case TeSelectedByPointing: whereClause += " AND (grid_status = 1 OR grid_status = 3"; whereClause += " OR (grid_status IS NULL AND (c_object_status = 1 OR c_object_status = 3)))"; break; case TeNotSelectedByPointing: whereClause += " AND (grid_status = 0 OR grid_status = 2"; whereClause += " OR (grid_status is null AND (c_object_status = 0 OR c_object_status = 2)))"; break; case TeSelectedByQuery: whereClause += " AND (grid_status = 2 OR grid_status = 3"; whereClause += " OR (grid_status is null AND (c_object_status = 2 OR c_object_status = 3)))"; break; case TeNotSelectedByQuery: whereClause += " AND (grid_status = 0 OR grid_status = 1"; whereClause += " OR (grid_status is null AND (c_object_status = 0 OR c_object_status = 1)))"; break; case TeGrouped: whereClause += " AND c_legend_id <> 0"; break; case TeNotGrouped: whereClause += " AND c_legend_id = 0"; break; case TeSelectedByPointingAndQuery: whereClause += " AND grid_status = 3"; whereClause += " OR (grid_status is null AND c_object_status = 3)"; break; case TeSelectedByPointingOrQuery: whereClause += " AND (grid_status = 1 OR grid_status = 2 OR grid_status = 3)"; whereClause += " OR (grid_status is null AND (c_object_status = 3 OR c_object_status = 1 OR c_object_status = 2))"; break; } return whereClause; }