Skip to content

Commit da96382

Browse files
committed
pgsql: Avoid unnecessary work in pgsql_copy_from_query() if the input already ends in a newline
1 parent e2396a6 commit da96382

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

ext/pgsql/pgsql.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3414,21 +3414,22 @@ static zend_result pgsql_copy_from_query(PGconn *pgsql, PGresult *pgsql_result,
34143414
if (UNEXPECTED(!tmp)) {
34153415
return FAILURE;
34163416
}
3417-
char *zquery = emalloc(ZSTR_LEN(tmp) + 2);
3418-
memcpy(zquery, ZSTR_VAL(tmp), ZSTR_LEN(tmp) + 1);
3419-
size_t zquery_len = ZSTR_LEN(tmp);
3420-
if (ZSTR_LEN(tmp) > 0 && zquery[ZSTR_LEN(tmp) - 1] != '\n') {
3417+
3418+
int result;
3419+
if (ZSTR_LEN(tmp) > 0 && ZSTR_VAL(tmp)[ZSTR_LEN(tmp) - 1] != '\n') {
3420+
char *zquery = emalloc(ZSTR_LEN(tmp) + 2);
3421+
memcpy(zquery, ZSTR_VAL(tmp), ZSTR_LEN(tmp) + 1);
34213422
zquery[ZSTR_LEN(tmp)] = '\n';
34223423
zquery[ZSTR_LEN(tmp) + 1] = '\0';
3423-
zquery_len++;
3424-
}
3425-
zend_tmp_string_release(tmp_tmp);
3426-
if (PQputCopyData(pgsql, zquery, zquery_len) != 1) {
3424+
result = PQputCopyData(pgsql, zquery, ZSTR_LEN(tmp) + 1);
34273425
efree(zquery);
3428-
return FAILURE;
3426+
} else {
3427+
result = PQputCopyData(pgsql, ZSTR_VAL(tmp), ZSTR_LEN(tmp));
34293428
}
3430-
efree(zquery);
3431-
return SUCCESS;
3429+
3430+
zend_tmp_string_release(tmp_tmp);
3431+
3432+
return result != 1 ? FAILURE : SUCCESS;
34323433
}
34333434

34343435
/* {{{ Copy table from array */

0 commit comments

Comments
 (0)