PostGIS 3.0.6dev-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 855 of file raster2pgsql.c.

860 {
861 char *fn = NULL;
862 uint32_t len = 0;
863 char *sql = NULL;
864 uint32_t x = 0;
865
866 assert(table != NULL);
867 assert(column != NULL);
868
869 /* COPY statements */
870 if (copy_statements) {
871
872 if (!copy_from(
873 schema, table, column,
874 (file_column_name ? filename : NULL), file_column_name,
875 buffer
876 )) {
877 rterror(_("insert_records: Could not add COPY statement to string buffer"));
878 return 0;
879 }
880
881
882 /* escape tabs in filename */
883 if (filename != NULL)
884 fn = strreplace(filename, "\t", "\\t", NULL);
885
886 /* rows */
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
893 sql = rtalloc(sizeof(char) * len);
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",
899 tileset->line[x],
900 (filename != NULL ? "\t" : ""),
901 (filename != NULL ? fn : "")
902 );
903
905 sql = NULL;
906 }
907
908 if (!copy_from_end(buffer)) {
909 rterror(_("process_rasters: Could not add COPY end statement to string buffer"));
910 return 0;
911 }
912
913 }
914 /* INSERT statements */
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 /* escape single-quotes in filename */
925 if (filename != NULL)
926 fn = strreplace(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
936 sql = rtalloc(sizeof(char) * sqllen);
937 if (sql == NULL) {
938 rterror(_("insert_records: Could not allocate memory for INSERT statement"));
939 return 0;
940 }
941 ptr = sql;
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 );
949 if (out_srid != SRID_UNKNOWN) {
950 ptr += sprintf(ptr, "ST_Transform(");
951 }
952 ptr += sprintf(ptr, "'%s'::raster",
953 tileset->line[x]
954 );
955 if (out_srid != SRID_UNKNOWN) {
956 ptr += sprintf(ptr, ", %d)", out_srid);
957 }
958 if (filename != NULL) {
959 ptr += sprintf(ptr, ",'%s'", fn);
960 }
961 ptr += sprintf(ptr, ");");
962
964 sql = NULL;
965 }
966 }
967
968 if (fn != NULL) rtdealloc(fn);
969 return 1;
970}
#define SRID_UNKNOWN
Unknown SRID value.
Definition liblwgeom.h:229
void rterror(const char *fmt,...)
Wrappers used for reporting errors and info.
Definition rt_context.c:199
void * rtalloc(size_t size)
Wrappers used for managing memory.
Definition rt_context.c:171
void rtdealloc(void *mem)
Definition rt_context.c:186
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: