860 {
861 char *fn = NULL;
862 uint32_t len = 0;
865
866 assert(table != NULL);
867 assert(column != NULL);
868
869
870 if (copy_statements) {
871
873 schema, table, column,
874 (file_column_name ? filename : NULL), file_column_name,
876 )) {
877 rterror(
_(
"insert_records: Could not add COPY statement to string buffer"));
878 return 0;
879 }
880
881
882
883 if (filename != NULL)
885
886
887 for (x = 0;
x < tileset->
length;
x++) {
888 len = strlen(tileset->
line[x]) + 1;
889
890 if (filename != NULL)
891 len += strlen(fn) + 1;
892
894 if (sql == NULL) {
895 rterror(
_(
"insert_records: Could not allocate memory for COPY statement"));
896 return 0;
897 }
898 sprintf(sql, "%s%s%s",
900 (filename != NULL ? "\t" : ""),
901 (filename != NULL ? fn : "")
902 );
903
906 }
907
909 rterror(
_(
"process_rasters: Could not add COPY end statement to string buffer"));
910 return 0;
911 }
912
913 }
914
915 else {
916 len = strlen("INSERT INTO () VALUES (ST_Transform(''::raster,xxxxxxxxx));") + 1;
917 if (schema != NULL)
918 len += strlen(schema);
919 len += strlen(table);
920 len += strlen(column);
921 if (filename != NULL)
922 len += strlen(",") + strlen(file_column_name);
923
924
925 if (filename != NULL)
927
928 for (x = 0;
x < tileset->
length;
x++) {
929 char *ptr;
930 int sqllen = len;
931
932 sqllen += strlen(tileset->
line[x]);
933 if (filename != NULL)
934 sqllen += strlen(",''") + strlen(fn);
935
937 if (sql == NULL) {
938 rterror(
_(
"insert_records: Could not allocate memory for INSERT statement"));
939 return 0;
940 }
942 ptr += sprintf(sql, "INSERT INTO %s%s (%s%s%s) VALUES (",
943 (schema != NULL ? schema : ""),
944 table,
945 column,
946 (filename != NULL ? "," : ""),
947 (filename != NULL ? file_column_name : "")
948 );
950 ptr += sprintf(ptr, "ST_Transform(");
951 }
952 ptr += sprintf(ptr, "'%s'::raster",
954 );
956 ptr += sprintf(ptr, ", %d)", out_srid);
957 }
958 if (filename != NULL) {
959 ptr += sprintf(ptr, ",'%s'", fn);
960 }
961 ptr += sprintf(ptr, ");");
962
965 }
966 }
967
969 return 1;
970}
#define SRID_UNKNOWN
Unknown SRID value.
void rterror(const char *fmt,...)
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)