MCPcopy Create free account
hub / github.com/MapServer/MapServer / msSplitData

Function msSplitData

maporaclespatial.c:346–532  ·  view source on GitHub ↗

break layer->data into geometry_column_name, table_name and srid */

Source from the content-addressed store, hash-verified

344
345/* break layer->data into geometry_column_name, table_name and srid */
346static int msSplitData( char *data, char **geometry_column_name, char **table_name, char **unique, char **srid, int *function, int *version )
347{
348 char *tok_from = "from";
349 char *tok_using = "using";
350 char *tok_unique = "unique";
351 char *tok_srid = "srid";
352 char *tok_version = "version";
353 char data_version[4] = "";
354 char tok_function[11] = "";
355 int parenthesis, i;
356 char *src = data, *tgt;
357 int table_name_size = TABLE_NAME_SIZE;
358 size_t buffer_size = 0;
359
360 /* bad 'data' */
361 if (data == NULL)
362 return 0;
363
364 buffer_size = strlen(data)+1;
365 *geometry_column_name = (char*)malloc(buffer_size);
366 *unique = (char*)malloc(buffer_size);
367 *srid = (char*)malloc(buffer_size);
368
369 /* clearup */
370 **geometry_column_name = **table_name = 0;
371
372 /* parsing 'geometry_column_name' */
373 for( ;*src && isspace( *src ); src++ ); /* skip blanks */
374 for( tgt=*geometry_column_name; *src; src++, tgt++ )
375 if (isspace( *src ))
376 break;
377 else
378 *tgt = *src;
379 *tgt = 0;
380
381 /* parsing 'from' */
382 for( ;*src && isspace( *src ); src++ ) ; /* skip blanks */
383 for( ;*src && *tok_from && tolower(*src)==*tok_from; src++, tok_from++ );
384 if (*tok_from != '\0')
385 return 0;
386
387 /* parsing 'table_name' or '(SELECT stmt)' */
388 i = 0;
389 for( ;*src && isspace( *src ); src++ ); /* skip blanks */
390 for( tgt=*table_name, parenthesis=0; *src; src++, tgt++, ++i )
391 {
392 if (*src == '(')
393 parenthesis++;
394 else if (*src == ')')
395 parenthesis--;
396 else if (parenthesis==0 && isspace( *src ))
397 break; /* stop on spaces */
398 /* double the size of the table_name array if necessary */
399 if (i == table_name_size) {
400 table_name_size *= 2;
401 *table_name = (char *) realloc(*table_name,sizeof(char *) * table_name_size);
402 }
403 *tgt = *src;

Calls 1

strlcpyFunction · 0.85

Tested by

no test coverage detected