|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
/* $PostgreSQL: pgsql/src/tutorial/funcs_new.c,v 1.11 2006/07/14 14:52:27 momjian Exp $ */ |
|
|
|
|
/* $PostgreSQL: pgsql/src/tutorial/funcs_new.c,v 1.12 2006/09/27 16:19:42 tgl Exp $ */ |
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
These are user-defined functions that can be bound to a Postgres backend |
|
|
|
@ -101,13 +101,14 @@ concat_text(PG_FUNCTION_ARGS) |
|
|
|
|
{ |
|
|
|
|
text *arg1 = PG_GETARG_TEXT_P(0); |
|
|
|
|
text *arg2 = PG_GETARG_TEXT_P(1); |
|
|
|
|
int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ; |
|
|
|
|
int32 arg1_size = VARSIZE(arg1) - VARHDRSZ; |
|
|
|
|
int32 arg2_size = VARSIZE(arg2) - VARHDRSZ; |
|
|
|
|
int32 new_text_size = arg1_size + arg2_size + VARHDRSZ; |
|
|
|
|
text *new_text = (text *) palloc(new_text_size); |
|
|
|
|
|
|
|
|
|
memset((void *) new_text, 0, new_text_size); |
|
|
|
|
VARATT_SIZEP(new_text) = new_text_size; |
|
|
|
|
strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ); |
|
|
|
|
strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ); |
|
|
|
|
memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size); |
|
|
|
|
memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size); |
|
|
|
|
PG_RETURN_TEXT_P(new_text); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|