Hi Fernando Thanks for your quick response!
Since in many cases the where-part is more complex the easiest solution for me is to omit the second parameter: alayerObj.queryByAttributes(aMapObj, null, "ID=4711",mapscript./MS_SINGLE/); Mmmh. It looks like this parameter was useless all the time anyway! Thank you very much! Benedikt PS: The documentation in http://mapserver.gis.umn.edu/docs/reference/mapfile/referencemanual-all-pages states, that FILTERITEM is only used in conjunction with OGR/Shapefile. Fernando Simon <[EMAIL PROTECTED]> schrieb am 29.11.2007 16:57:40: > Hi Benedikt, > This is a Oracle Spatial driver change for 5.0. And the source of > this issue was relate with some Filter/FilterItem problems for Oracle > Spatial in early versions (4.x). > The osFilterItem function in the source code is relate with FILTER > and FILTERITEM definitions for Mapfile (you can see here: > http://mapserver.gis.umn.edu/docs/reference/mapfile/referencemanual-all-pages) > and Mapscript. In the PHPMapscript, the info for queryByAttribute relate > that the parameters that you pass will overwrite what you define for > FILTER/FILTERITEM in Mapfile. In the same doc for queryByAttribute: > "qitem is the item (attribute) on which the query is performed, and > qstring is the expression to match." > In the source code for 5.0 version this is a new (maybe better) > interpretation for the docs. I believe that this new way is better when > compared with the docs. > Best regards. > > Fernando Simon > > > Benedikt Rothe wrote: > > > > Hello List > > > > I'm using Mapserer with Oracle/Java-Mapscript and migrating my app > > from Mapserver 4.x to Mapserer 5.x > > and have a problem with layerObj.queryByAttributes. > > > > I used to query features with code like this: > > alayerObj.queryByAttributes(aMapObj, "ID", "ID=4711", > > mapscript./MS_SINGLE/); > > In Mapserver 5 this code results in an Mapserver-Error-Message > > stating, that the "SQL command is not properly ended". > > > > The Mapserver-generated SQL-Command includes a Where-Clause of the > > form "ID = ID = 4711". > > > > I had a look in maporaclespatial.c function "osFilteritem". > > Follwing code seems to produce this Where-Clause: > > if (layer->filteritem != NULL) > > { > > sprintf (query_str + strlen(query_str), " %s = ", layer->filteritem); > > //snprintf (query_str + strlen(query_str), " %s = ", > > layer->filteritem); > > } > > > > Changing my Java-Code to > > alayerObj.queryByAttributes(aMapObj, "ID", "4711", > > mapscript./MS_SINGLE/); > > solves the problem. > > > > Questions: > > * Is this a bug in Mapserver or a new feature? > > * Is this really a change in Mapserver 5.0? > > * Shall I rather change my Java-Code or shall I patch Mapserver/ > > maporaclespatial.c/osFilteritem? > > Would the changed Java-Code work with the Oracle-driver only? > > > > Greetings from Aachen/Germany > > Benedikt Rothe > > > > *Attachement "Error-Message": *(Added Newlines) > > msOracleSpatialLayerWhichShapes(): OracleSpatial error. Error: > > ORA-00933: SQL command not properly ended > > . Query statement: > > SELECT > > ID, ID, SHAPE > > FROM > > (select ID,SHAPE > > FROM MYTABLE) > > WHERE *ID = ID = 4711* AND > > SDO_FILTER( > > SHAPE, MDSYS.SDO_GEOMETRY(2003, 82015, > > NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3), > > MDSYS.SDO_ORDINATE_ARRAY(2501576.69,5621567,2503419.31,5622567) > > ),'querytype=window') = 'TRUE' . > > Check your data statement. > > > > *Attachement "Part of mapfile":* > > # Projekte > > LAYER > > NAME "PROJEKT" > > TYPE POINT > > STATUS DEFAULT > > #DEBUG ON > > TEMPLATE "dummy.html" > > CONNECTION "XXX/[EMAIL PROTECTED]" > > CONNECTIONTYPE oraclespatial > > DATA "SHAPE FROM (select ID,SHAPE FROM MYTABLE) using unique ID > > srid 82015" > > CLASS > > NAME "" > > STYLE > > COLOR 0 100 100 > > OUTLINECOLOR 0 0 0 > > SIZE 12 > > SYMBOL 'star' > > END > > END > > END