-// paramValues[5] = (const char *)feature.name;
- paramValues[6] = (const char *)feature.adminLevel;
- paramValues[7] = (const char *)feature.houseNumber;
- paramValues[8] = (const char *)feature.rankAddress;
- paramValues[9] = (const char *)feature.rankSearch;
- paramValues[10] = (const char *)feature.geometry;
- res = PQexecPrepared(conn, "placex_insert", 11, paramValues, NULL, NULL, 0);
+
+ featureNameString[0] = 0;
+ if (featureNameLines)
+ {
+ namePos = 0;
+ lineTypeLen = 0;
+ lineValueLen = 0;
+ for(i = 0; i < featureNameLines; i++)
+ {
+ lineTypeLen = strlen(BAD_CAST featureName[i].type);
+ lineValueLen = strlen(BAD_CAST featureName[i].value);
+ if (namePos+lineTypeLen+lineValueLen+7 > MAX_FEATURENAMESTRING)
+ {
+ fprintf(stderr, "feature name too long: %s", (const char *)featureName[i].value);
+ break;
+ }
+ if (namePos) strcpy(featureNameString+(namePos++), ",");
+ strcpy(featureNameString+(namePos++), "\"");
+ strcpy(featureNameString+namePos, BAD_CAST featureName[i].type);
+ namePos += lineTypeLen;
+ strcpy(featureNameString+namePos, "\"=>\"");
+ namePos += 4;
+ strcpy(featureNameString+namePos, BAD_CAST featureName[i].value);
+ namePos += lineValueLen;
+ strcpy(featureNameString+(namePos++), "\"");
+ }
+ }
+ paramValues[5] = (const char *)featureNameString;
+
+ featureExtraTagString[0] = 0;
+ if (featureExtraTagLines)
+ {
+ namePos = 0;
+ lineTypeLen = 0;
+ lineValueLen = 0;
+ for(i = 0; i < featureExtraTagLines; i++)
+ {
+ lineTypeLen = strlen(BAD_CAST featureExtraTag[i].type);
+ lineValueLen = strlen(BAD_CAST featureExtraTag[i].value);
+ if (namePos+lineTypeLen+lineValueLen+7 > MAX_FEATUREEXTRATAGSTRING)
+ {
+ fprintf(stderr, "feature extra tag too long: %s", (const char *)featureExtraTag[i].value);
+ break;
+ }
+ if (namePos) strcpy(featureExtraTagString+(namePos++),",");
+ strcpy(featureExtraTagString+(namePos++), "\"");
+ strcpy(featureExtraTagString+namePos, BAD_CAST featureExtraTag[i].type);
+ namePos += lineTypeLen;
+ strcpy(featureExtraTagString+namePos, "\"=>\"");
+ namePos += 4;
+ strcpy(featureExtraTagString+namePos, BAD_CAST featureExtraTag[i].value);
+ namePos += lineValueLen;
+ strcpy(featureExtraTagString+(namePos++), "\"");
+ }
+ }
+ paramValues[6] = (const char *)featureExtraTagString;
+
+ paramValues[7] = (const char *)feature.adminLevel;
+ paramValues[8] = (const char *)feature.houseNumber;
+ paramValues[9] = (const char *)feature.rankAddress;
+ paramValues[10] = (const char *)feature.rankSearch;
+ paramValues[11] = (const char *)feature.geometry;
+ res = PQexecPrepared(conn, "placex_insert", 12, paramValues, NULL, NULL, 0);