Skip to content

Commit

Permalink
optimize
Browse files Browse the repository at this point in the history
  • Loading branch information
RekGRpth committed Jan 26, 2025
1 parent f5efc1c commit 5aac643
Showing 1 changed file with 36 additions and 72 deletions.
108 changes: 36 additions & 72 deletions pg_curl.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,15 @@ static pg_curl_t *pg_curl_easy_init(NameData *conname) {
#define PG_CONNAME(arg) (PG_NARGS() < arg + 1 || PG_ARGISNULL(arg)) ? &pg_curl.unknown : PG_GETARG_NAME(arg)

EXTENSION(pg_curl_easy_header_reset) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
curl_slist_free_all(curl->header);
curl->header = NULL;
PG_RETURN_VOID();
}

EXTENSION(pg_curl_easy_mime_reset) {
#if CURL_AT_LEAST_VERSION(7, 56, 0)
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
curl_mime_free(curl->mime);
curl->mime = NULL;
PG_RETURN_VOID();
Expand All @@ -278,33 +276,29 @@ EXTENSION(pg_curl_easy_mime_reset) {
}

EXTENSION(pg_curl_easy_postquote_reset) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
curl_slist_free_all(curl->postquote);
curl->postquote = NULL;
PG_RETURN_VOID();
}

EXTENSION(pg_curl_easy_prequote_reset) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
curl_slist_free_all(curl->prequote);
curl->prequote = NULL;
PG_RETURN_VOID();
}

EXTENSION(pg_curl_easy_quote_reset) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
curl_slist_free_all(curl->quote);
curl->quote = NULL;
PG_RETURN_VOID();
}

EXTENSION(pg_curl_easy_recipient_reset) {
#if CURL_AT_LEAST_VERSION(7, 20, 0)
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
curl_slist_free_all(curl->recipient);
curl->recipient = NULL;
PG_RETURN_VOID();
Expand All @@ -314,8 +308,7 @@ EXTENSION(pg_curl_easy_recipient_reset) {
}

EXTENSION(pg_curl_easy_reset) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
MemSet(curl->errbuf, 0, sizeof(*curl->errbuf));
curl->errcode = CURLE_OK;
pg_curl_easy_header_reset(fcinfo);
Expand Down Expand Up @@ -347,8 +340,7 @@ EXTENSION(pg_curl_easy_escape) {
#if CURL_AT_LEAST_VERSION(7, 15, 4)
text *string;
char *escape;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_escape requires argument string")));
string = PG_GETARG_TEXT_PP(0);
if (!(escape = curl_easy_escape(curl->easy, VARDATA_ANY(string), VARSIZE_ANY_EXHDR(string)))) PG_RETURN_NULL();
Expand All @@ -366,8 +358,7 @@ EXTENSION(pg_curl_easy_unescape) {
text *url;
char *unescape;
int outlength;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_unescape requires argument url")));
url = PG_GETARG_TEXT_PP(0);
if (!(unescape = curl_easy_unescape(curl->easy, VARDATA_ANY(url), VARSIZE_ANY_EXHDR(url), &outlength))) PG_RETURN_NULL();
Expand All @@ -383,8 +374,7 @@ EXTENSION(pg_curl_easy_unescape) {
EXTENSION(pg_curl_header_append) {
char *name, *value;
StringInfoData buf;
NameData *conname = PG_CONNAME(2);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(2));
struct curl_slist *temp = curl->header;
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_header_append requires argument name")));
name = TextDatumGetCString(PG_GETARG_DATUM(0));
Expand All @@ -401,8 +391,7 @@ EXTENSION(pg_curl_header_append) {

EXTENSION(pg_curl_postquote_append) {
char *command;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
struct curl_slist *temp = curl->postquote;
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_postquote_append requires argument command")));
command = TextDatumGetCString(PG_GETARG_DATUM(0));
Expand All @@ -413,8 +402,7 @@ EXTENSION(pg_curl_postquote_append) {

EXTENSION(pg_curl_prequote_append) {
char *command;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
struct curl_slist *temp = curl->prequote;
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_prequote_append requires argument command")));
command = TextDatumGetCString(PG_GETARG_DATUM(0));
Expand All @@ -425,8 +413,7 @@ EXTENSION(pg_curl_prequote_append) {

EXTENSION(pg_curl_quote_append) {
char *command;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
struct curl_slist *temp = curl->quote;
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_quote_append requires argument command")));
command = TextDatumGetCString(PG_GETARG_DATUM(0));
Expand All @@ -438,8 +425,7 @@ EXTENSION(pg_curl_quote_append) {
EXTENSION(pg_curl_recipient_append) {
#if CURL_AT_LEAST_VERSION(7, 20, 0)
char *email;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
struct curl_slist *temp = curl->recipient;
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_recipient_append requires argument email")));
email = TextDatumGetCString(PG_GETARG_DATUM(0));
Expand Down Expand Up @@ -484,8 +470,7 @@ EXTENSION(pg_curl_mime_data_text) {
#if CURL_AT_LEAST_VERSION(7, 56, 0)
CURLcode ec = CURL_LAST;
curl_mimepart *part;
NameData *conname = PG_CONNAME(6);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(6));
if (!curl->mime && !(curl->mime = curl_mime_init(curl->easy))) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("!curl_mime_init")));
if (!(part = curl_mime_addpart(curl->mime))) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("!curl_mime_addpart")));
if (!PG_ARGISNULL(0)) {
Expand All @@ -503,8 +488,7 @@ EXTENSION(pg_curl_mime_data_bytea) {
#if CURL_AT_LEAST_VERSION(7, 56, 0)
CURLcode ec = CURL_LAST;
curl_mimepart *part;
NameData *conname = PG_CONNAME(6);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(6));
if (!curl->mime && !(curl->mime = curl_mime_init(curl->easy))) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("!curl_mime_init")));
if (!(part = curl_mime_addpart(curl->mime))) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("!curl_mime_addpart")));
if (!PG_ARGISNULL(0)) {
Expand All @@ -522,8 +506,7 @@ EXTENSION(pg_curl_mime_file) {
#if CURL_AT_LEAST_VERSION(7, 56, 0)
CURLcode ec = CURL_LAST;
curl_mimepart *part;
NameData *conname = PG_CONNAME(6);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(6));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_mime_file requires argument data")));
if (!curl->mime && !(curl->mime = curl_mime_init(curl->easy))) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("!curl_mime_init")));
if (!(part = curl_mime_addpart(curl->mime))) ereport(ERROR, (errcode(ERRCODE_OUT_OF_MEMORY), errmsg("!curl_mime_addpart")));
Expand All @@ -541,8 +524,7 @@ EXTENSION(pg_curl_mime_file) {
EXTENSION(pg_curl_easy_setopt_postfields) {
CURLcode ec = CURLE_OK;
bytea *parameter;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_setopt_postfields requires argument parameter")));
parameter = PG_GETARG_BYTEA_PP(0);
resetStringInfo(&curl->postfield);
Expand All @@ -555,8 +537,7 @@ EXTENSION(pg_curl_easy_setopt_postfields) {
EXTENSION(pg_curl_easy_setopt_readdata) {
CURLcode ec = CURLE_OK;
bytea *parameter;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_setopt_readdata requires argument parameter")));
parameter = PG_GETARG_BYTEA_PP(0);
resetStringInfo(&curl->postfield);
Expand All @@ -569,8 +550,7 @@ EXTENSION(pg_curl_easy_setopt_readdata) {
EXTENSION(pg_curl_easy_setopt_url) {
CURLcode ec = CURLE_OK;
text *parameter;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_setopt_url requires argument parameter")));
parameter = PG_GETARG_TEXT_PP(0);
resetStringInfo(&curl->url);
Expand Down Expand Up @@ -600,16 +580,14 @@ static Datum pg_curl_postfield_or_url_append(PG_FUNCTION_ARGS, pg_curl_t *curl,
}

EXTENSION(pg_curl_postfield_append) {
NameData *conname = PG_CONNAME(2);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(2));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("pg_curl_postfield_append requires argument name")));
resetStringInfo(&curl->readdata);
return pg_curl_postfield_or_url_append(fcinfo, curl, &curl->postfield);
}

EXTENSION(pg_curl_url_append) {
NameData *conname = PG_CONNAME(2);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(2));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("pg_curl_url_append requires argument name")));
return pg_curl_postfield_or_url_append(fcinfo, curl, &curl->url);
}
Expand All @@ -619,8 +597,7 @@ static Datum pg_curl_easy_setopt_blob(PG_FUNCTION_ARGS, CURLoption option) {
CURLcode ec = CURLE_OK;
bytea *parameter;
struct curl_blob blob;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_setopt_* requires argument parameter")));
parameter = PG_GETARG_BYTEA_PP(0);
blob.data = VARDATA_ANY(parameter);
Expand All @@ -635,8 +612,7 @@ static Datum pg_curl_easy_setopt_blob(PG_FUNCTION_ARGS, CURLoption option) {
static Datum pg_curl_easy_setopt_char(PG_FUNCTION_ARGS, CURLoption option) {
CURLcode ec = CURL_LAST;
char *parameter;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_setopt_* requires argument parameter")));
parameter = TextDatumGetCString(PG_GETARG_DATUM(0));
if ((ec = curl_easy_setopt(curl->easy, option, parameter)) != CURLE_OK) ereport(ERROR, (pg_curl_ec(ec), errmsg("%s", curl_easy_strerror(ec))));
Expand Down Expand Up @@ -1207,8 +1183,7 @@ EXTENSION(pg_curl_easy_setopt_xoauth2_bearer) {
static Datum pg_curl_easy_setopt_long(PG_FUNCTION_ARGS, CURLoption option) {
CURLcode ec = CURL_LAST;
long parameter;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if (PG_ARGISNULL(0)) ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("curl_easy_setopt_* requires argument parameter")));
parameter = PG_GETARG_INT64(0);
if ((ec = curl_easy_setopt(curl->easy, option, parameter)) != CURLE_OK) ereport(ERROR, (pg_curl_ec(ec), errmsg("%s", curl_easy_strerror(ec))));
Expand Down Expand Up @@ -1753,8 +1728,7 @@ EXTENSION(pg_curl_easy_setopt_use_ssl) {
}
EXTENSION(pg_curl_easy_setopt_verbose) {
CURLcode ec = CURL_LAST;
NameData *conname = PG_CONNAME(1);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(1));
if ((ec = curl_easy_setopt(curl->easy, CURLOPT_DEBUGDATA, curl)) != CURLE_OK) ereport(ERROR, (pg_curl_ec(ec), errmsg("%s", curl_easy_strerror(ec))));
if ((ec = curl_easy_setopt(curl->easy, CURLOPT_DEBUGFUNCTION, pg_debug_callback)) != CURLE_OK) ereport(ERROR, (pg_curl_ec(ec), errmsg("%s", curl_easy_strerror(ec))));
return pg_curl_easy_setopt_long(fcinfo, CURLOPT_VERBOSE);
Expand Down Expand Up @@ -1886,36 +1860,31 @@ EXTENSION(pg_curl_multi_perform) {
}

EXTENSION(pg_curl_easy_getinfo_debug) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if (!curl->debug.len) PG_RETURN_NULL();
PG_RETURN_TEXT_P(cstring_to_text_with_len(curl->debug.data, curl->debug.len));
}

EXTENSION(pg_curl_easy_getinfo_header_in) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if (!curl->header_in.len) PG_RETURN_NULL();
PG_RETURN_TEXT_P(cstring_to_text_with_len(curl->header_in.data, curl->header_in.len));
}

EXTENSION(pg_curl_easy_getinfo_header_out) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if (!curl->header_out.len) PG_RETURN_NULL();
PG_RETURN_TEXT_P(cstring_to_text_with_len(curl->header_out.data, curl->header_out.len));
}

EXTENSION(pg_curl_easy_getinfo_data_in) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if (!curl->data_in.len) PG_RETURN_NULL();
PG_RETURN_BYTEA_P(cstring_to_text_with_len(curl->data_in.data, curl->data_in.len));
}

EXTENSION(pg_curl_easy_getinfo_data_out) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if (!curl->data_out.len) PG_RETURN_NULL();
PG_RETURN_BYTEA_P(cstring_to_text_with_len(curl->data_out.data, curl->data_out.len));
}
Expand All @@ -1931,30 +1900,26 @@ EXTENSION(pg_curl_easy_getinfo_response) {
}

EXTENSION(pg_curl_easy_getinfo_errbuf) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if (!curl->errbuf[0]) PG_RETURN_NULL();
PG_RETURN_TEXT_P(cstring_to_text(curl->errbuf));
}

EXTENSION(pg_curl_easy_getinfo_errdesc) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
PG_RETURN_TEXT_P(cstring_to_text(curl_easy_strerror(curl->errcode)));
}

EXTENSION(pg_curl_easy_getinfo_errcode) {
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
PG_RETURN_INT64(curl->errcode);
}

static Datum pg_curl_easy_getinfo_char(PG_FUNCTION_ARGS, CURLINFO info) {
#if CURL_AT_LEAST_VERSION(7, 4, 1)
CURLcode ec = CURL_LAST;
char *value = NULL;
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if ((ec = curl_easy_getinfo(curl->easy, info, &value)) != CURLE_OK) ereport(ERROR, (pg_curl_ec(ec), errmsg("%s", curl_easy_strerror(ec))));
if (!value) PG_RETURN_NULL();
PG_RETURN_TEXT_P(cstring_to_text(value));
Expand Down Expand Up @@ -2024,8 +1989,7 @@ static Datum pg_curl_easy_getinfo_long(PG_FUNCTION_ARGS, CURLINFO info) {
#if CURL_AT_LEAST_VERSION(7, 4, 1)
CURLcode ec = CURL_LAST;
long value;
NameData *conname = PG_CONNAME(0);
pg_curl_t *curl = pg_curl_easy_init(conname);
pg_curl_t *curl = pg_curl_easy_init(PG_CONNAME(0));
if ((ec = curl_easy_getinfo(curl->easy, info, &value)) != CURLE_OK) ereport(ERROR, (pg_curl_ec(ec), errmsg("%s", curl_easy_strerror(ec))));
PG_RETURN_INT64(value);
#else
Expand Down

0 comments on commit 5aac643

Please sign in to comment.