MCPcopy Index your code
hub / github.com/MapServer/MapServer / msCSVJoinConnect

Function msCSVJoinConnect

mapjoin.c:326–409  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

324} msCSVJoinInfo;
325
326int msCSVJoinConnect(layerObj *layer, joinObj *join)
327{
328 int i;
329 FILE *stream;
330 char szPath[MS_MAXPATHLEN];
331 msCSVJoinInfo *joininfo;
332 char buffer[MS_BUFFER_LENGTH];
333
334 if(join->joininfo) return(MS_SUCCESS); /* already open */
335 if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE )
336 return MS_FAILURE;
337
338
339 /* allocate a msCSVJoinInfo struct */
340 if((joininfo = (msCSVJoinInfo *) malloc(sizeof(msCSVJoinInfo))) == NULL) {
341 msSetError(MS_MEMERR, "Error allocating CSV table info structure.", "msCSVJoinConnect()");
342 return(MS_FAILURE);
343 }
344
345 /* initialize any members that won't get set later on in this function */
346 joininfo->target = NULL;
347 joininfo->nextrow = 0;
348
349 join->joininfo = joininfo;
350
351 /* open the CSV file */
352 if((stream = fopen( msBuildPath3(szPath, layer->map->mappath, layer->map->shapepath, join->table), "r" )) == NULL) {
353 if((stream = fopen( msBuildPath(szPath, layer->map->mappath, join->table), "r" )) == NULL) {
354 msSetError(MS_IOERR, "(%s)", "msCSVJoinConnect()", join->table);
355 return(MS_FAILURE);
356 }
357 }
358
359 /* once through to get the number of rows */
360 joininfo->numrows = 0;
361 while(fgets(buffer, MS_BUFFER_LENGTH, stream) != NULL) joininfo->numrows++;
362 rewind(stream);
363
364 if((joininfo->rows = (char ***) malloc(joininfo->numrows*sizeof(char **))) == NULL) {
365 msSetError(MS_MEMERR, "Error allocating rows.", "msCSVJoinConnect()");
366 return(MS_FAILURE);
367 }
368
369 /* load the rows */
370 i = 0;
371 while(fgets(buffer, MS_BUFFER_LENGTH, stream) != NULL) {
372 msStringTrimEOL(buffer);
373 joininfo->rows[i] = msStringSplitComplex(buffer, ",", &(join->numitems), MS_ALLOWEMPTYTOKENS);
374 i++;
375 }
376 fclose(stream);
377
378 /* get "from" item index */
379 for(i=0; i<layer->numitems; i++) {
380 if(strcasecmp(layer->items[i],join->from) == 0) { /* found it */
381 joininfo->fromindex = i;
382 break;
383 }

Callers 1

msJoinConnectFunction · 0.85

Calls 7

msCheckParentPointerFunction · 0.85
msSetErrorFunction · 0.85
msBuildPath3Function · 0.85
msBuildPathFunction · 0.85
msStringTrimEOLFunction · 0.85
msStringSplitComplexFunction · 0.85
strcasecmpFunction · 0.85

Tested by

no test coverage detected