Can't read long expressions with MapScript

Steve Lime Steve.Lime at DNR.STATE.MN.US
Tue Aug 29 22:08:44 EDT 2006


This is a known issue that has been very difficult to track down.
There's a bug already
filed. It seems to be a lexer issue but I've not been able to find any
hard limits on token
size in flex generate code. I suppose I'll need to roll those sleeves up
again. Could
you tag your information onto bug 1428?

Steve

>>> "B. Veldkamp (Berend)" <b.veldkamp at ZONNET.NL> 08/29/06 2:01 AM >>>
Hi,

I wrote some code in PHP MapScript that generates expressions for 
classes in a layer. Basically the expressions look like: ( "[RIKZCODE]" 
IN "ID1,ID2,ID3" )
where IDx are feature IDs. Most of the time this works without any 
problem, but it looks like there's a limit to the number of ID's I can 
add. At least, I can /set/ the expression, but I can't /read/ it with 
$class->getExpression(). I did some testing, and it looks like 
getExpression() fails when the expression set in the map is over 512 
characters.

Here's what the code looks like:

// All expressions are initially set to "empty"
while(odbc_fetch_row($records))
{  $rikzcode = odbc_result ($records, odbc_field_name ($records, 1));
  $value = odbc_result ($records, odbc_field_name ($records, 2));

  // Determine class to which this ID belongs
  $classID = GetClassIDByValue($value);

  if ($classID > -1)
  {
    $cls = $layer->getClass($classID);
    $exp = $cls->getExpression();  // <== Crash here

    if ($exp == "\"empty\"")      $exp = "( \"[RIKZCODE]\" IN 
\"$rikzcode\" )"; // initial value
    else
      $exp = substr($exp, 0, -3) . ",$rikzcode\" )"; // append value

    $cls->setExpression($exp);
  }
}


-- 
Berend Veldkamp
Havikstraat 45C
3514 TM Utrecht



More information about the mapserver-users mailing list