PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ insert_records()

static int insert_records ( const char *  schema,
const char *  table,
const char *  column,
const char *  filename,
const char *  file_column_name,
int  copy_statements,
int  out_srid,
STRINGBUFFER tileset,
STRINGBUFFER buffer 
)
static

Definition at line 867 of file raster2pgsql.c.

872 {
873 char *fn = NULL;
874 uint32_t len = 0;
875 char *sql = NULL;
876 uint32_t x = 0;
877
878 assert(table != NULL);
879 assert(column != NULL);
880
881 /* COPY statements */
882 if (copy_statements) {
883
884 if (!copy_from(
885 schema, table, column,
886 (file_column_name ? filename : NULL), file_column_name,
887 buffer
888 )) {
889 rterror(_("insert_records: Could not add COPY statement to string buffer"));
890 return 0;
891 }
892
893
894 /* escape tabs in filename */
895 if (filename != NULL)
896 fn = strreplace(filename, "\t", "\\t", NULL);
897
898 /* rows */
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
905 sql = rtalloc(sizeof(char) * len);
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",
911 tileset->line[x],
912 (filename != NULL ? "\t" : ""),
913 (filename != NULL ? fn : "")
914 );
915
917 sql = NULL;
918 }
919
920 if (!copy_from_end(buffer)) {
921 rterror(_("process_rasters: Could not add COPY end statement to string buffer"));
922 return 0;
923 }
924
925 }
926 /* INSERT statements */
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 /* escape single-quotes in filename */
937 if (filename != NULL)
938 fn = strreplace(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
948 sql = rtalloc(sizeof(char) * sqllen);
949 if (sql == NULL) {
950 rterror(_("insert_records: Could not allocate memory for INSERT statement"));
951 return 0;
952 }
953 ptr = sql;
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 );
961 if (out_srid != SRID_UNKNOWN) {
962 ptr += sprintf(ptr, "ST_Transform(");
963 }
964 ptr += sprintf(ptr, "'%s'::raster",
965 tileset->line[x]
966 );
967 if (out_srid != SRID_UNKNOWN) {
968 ptr += sprintf(ptr, ", %d)", out_srid);
969 }
970 if (filename != NULL) {
971 ptr += sprintf(ptr, ",'%s'", fn);
972 }
973 ptr += sprintf(ptr, ");");
974
976 sql = NULL;
977 }
978 }
979
980 if (fn != NULL) rtdealloc(fn);
981 return 1;
982}
#define SRID_UNKNOWN
Unknown SRID value.
Definition liblwgeom.h:215
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.
Definition rt_context.c:191
void rtdealloc(void *mem)
Definition rt_context.c:206
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)
#define _(String)
Definition shpcommon.h:24

References _, append_sql_to_buffer(), buffer(), copy_from(), copy_from_end(), stringbuffer_t::length, stringbuffer_t::line, rtalloc(), rtdealloc(), rterror(), SRID_UNKNOWN, and strreplace().

Referenced by build_overview(), convert_raster(), and process_rasters().

Here is the call graph for this function:
Here is the caller graph for this function: