[mapserver-dev] [EXTERNAL] Problem with filter in Oracle

Michael Smith michael.smith.erdc at gmail.com
Thu Jan 14 06:35:31 PST 2016


Björn,

Can you turn on DEBUG level 3 and show what queries are being generated?

That will help isolate whats going on with the queries to the backend.

Mike

-- 
Michael Smith
Remote Sensing/GIS Center
US Army Corps of Engineers
From:  mapserver-dev <mapserver-dev-bounces at lists.osgeo.org> on behalf of
Björn Danielsson <bjorn.danielsson at falubo.se>
Date:  Thursday, January 14, 2016 at  4:30 AM
To:  "mapserver-dev at lists.osgeo.org" <mapserver-dev at lists.osgeo.org>
Subject:  [EXTERNAL] [mapserver-dev] Problem with filter in Oracle
Resent-From:  Michael Smith <michael.smith at usace.army.mil>

> Hi,
>  
> I have been using ms4w for quite some time and have discovered problems with
> Oracle when using php_mapscript. I posted this problem at ms4w's support and
> was adviced to turn to you.
>  
> I am supporting a gis-system on the web that is heavily database dependent,
> and can run on either postgres or oracle according to the costumer's request.
> So there are two sets of php-scripts that are identical apart from the
> database calls.
>  
> Thera are no problems with postgres.
>  
> With Oracle there is a funny problem with filter.
> Look at this:
>  
> foreach($aLayersIdx as $layerIndex) {
>   $oLayerK = $oMapK->getLayer($layerIndex);
> if ($bDebug) {
>   fwrite($f,"layer: ".$oLayerK->name."\r\n");
> }
>   if ($oLayerK->name == "AVD" && $avd == "") {
>     $oLayerK->set("status",MS_OFF);
>     continue;
>   }
>   $filter = "";
>   switch ($oLayerK->name) {
>     case "AVD" :
>       $filter = "([ORGID]='".$orgid."' AND [FV]='".$fv."' AND [BEV]='".$bev."'
> AND [SKIFTE]='".$skifte."' AND [AVD]='".$avd."')";
>       $data = "KARTOBJ_SDO FROM ".$dbowner.".AVD*AVD";
>       break;
>       
>     case "X" :
>       $filter = "([ID]='".$sessid."')";
>       $data = "KARTOBJ_SDO FROM ".$dbowner.".KARTA*TMP2";
>       break;
>   }
>   
>   $data = str_replace("*","$",$data);
>  
>   $oLayerK->set("data", $data);
>   $oLayerK->setFilter($filter);
>   $oLayerK->setConnectionType(MS_ORACLESPATIAL);
>   $oLayerK->set("connection", $conn);
>   $oLayerK->set("status", MS_ON);
>   if ($bDebug) {
>     fwrite($f,"connection: ".$conn."\r\n");
>     fwrite($f,"filter: ".$filter."\r\n");
>     fwrite($f,"data: ".$data."\r\n");
>   }  
> }
>  
> A mapfile with two layers, 'AVD' and 'X'.
> Problem is that filter for layer 'X' does not work. Or, rather, it works but
> no record is returned. The mapserver debugger reports no error.
> The filter for layer 'AVD' works fine.
>  
> When the line $filter = "[ID]='".$sessid."')" is commented and the table
> KARTA$TMP2 contains only one record it works and a map layer is produced. So
> it seems that when filter is introduced in the select something goes wrong.
>  
> I thought that ID might be a reserved word but after some testing I found that
> filter fails in calls to other tables as well.
> For example:
> This works
>      $filter = "([ORGID]='".$orgid."' AND [FV]='".$fv."' AND
> [BEV]='".$bev."')";
> But this does not work
>      $filter = "([ORGID]='".$orgid."' AND [FV]='".$fv."' AND [BEV]='".$bev."'
> AND [SKIFTE]='".$skifte."')";
>  
> The problem is consistent in that way that where the problem occurs it always
> occurs, and where it not occurs it never occurs. It is not intermittent.
>  
> The php script ( where the snippet came from above ) was developed under ms4w
> version 2.2.7 and at that time no problems occured. I have also used version
> 3.0.6 and 3.1.1 and both versions have problems. So somewhere between 2.2.7
> and 3.0.6 something happened.
>  
> I am at loss here.
>  
> Björn Danielsson


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-dev/attachments/20160114/765d6d00/attachment.html>


More information about the mapserver-dev mailing list