872 {
873 char *fn = NULL;
874 uint32_t len = 0;
877
878 assert(table != NULL);
879 assert(column != NULL);
880
881
882 if (copy_statements) {
883
885 schema, table, column,
886 (file_column_name ? filename : NULL), file_column_name,
888 )) {
889 rterror(
_(
"insert_records: Could not add COPY statement to string buffer"));
890 return 0;
891 }
892
893
894
895 if (filename != NULL)
897
898
899 for (x = 0;
x < tileset->
length;
x++) {
900 len = strlen(tileset->
line[x]) + 1;
901
902 if (filename != NULL)
903 len += strlen(fn) + 1;
904
906 if (sql == NULL) {
907 rterror(
_(
"insert_records: Could not allocate memory for COPY statement"));
908 return 0;
909 }
910 sprintf(sql, "%s%s%s",
912 (filename != NULL ? "\t" : ""),
913 (filename != NULL ? fn : "")
914 );
915
918 }
919
921 rterror(
_(
"process_rasters: Could not add COPY end statement to string buffer"));
922 return 0;
923 }
924
925 }
926
927 else {
928 len = strlen("INSERT INTO () VALUES (ST_Transform(''::raster,xxxxxxxxx));") + 1;
929 if (schema != NULL)
930 len += strlen(schema);
931 len += strlen(table);
932 len += strlen(column);
933 if (filename != NULL)
934 len += strlen(",") + strlen(file_column_name);
935
936
937 if (filename != NULL)
939
940 for (x = 0;
x < tileset->
length;
x++) {
941 char *ptr;
942 int sqllen = len;
943
944 sqllen += strlen(tileset->
line[x]);
945 if (filename != NULL)
946 sqllen += strlen(",''") + strlen(fn);
947
949 if (sql == NULL) {
950 rterror(
_(
"insert_records: Could not allocate memory for INSERT statement"));
951 return 0;
952 }
954 ptr += sprintf(sql, "INSERT INTO %s%s (%s%s%s) VALUES (",
955 (schema != NULL ? schema : ""),
956 table,
957 column,
958 (filename != NULL ? "," : ""),
959 (filename != NULL ? file_column_name : "")
960 );
962 ptr += sprintf(ptr, "ST_Transform(");
963 }
964 ptr += sprintf(ptr, "'%s'::raster",
966 );
968 ptr += sprintf(ptr, ", %d)", out_srid);
969 }
970 if (filename != NULL) {
971 ptr += sprintf(ptr, ",'%s'", fn);
972 }
973 ptr += sprintf(ptr, ");");
974
977 }
978 }
979
981 return 1;
982}
#define SRID_UNKNOWN
Unknown SRID value.
void rterror(const char *fmt,...) __attribute__((format(printf
Wrappers used for reporting errors and info.
void * rtalloc(size_t size)
Wrappers used for managing memory.
void rtdealloc(void *mem)
Datum buffer(PG_FUNCTION_ARGS)
static int append_sql_to_buffer(STRINGBUFFER *buffer, const char *str)
static int copy_from_end(STRINGBUFFER *buffer)
static char * strreplace(const char *str, const char *oldstr, const char *newstr, int *count)
static int copy_from(const char *schema, const char *table, const char *column, const char *filename, const char *file_column_name, STRINGBUFFER *buffer)