mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Avoid string copies for date/time format in firebird (#17902)
This commit is contained in:
parent
f89b0a229c
commit
404c96e2bb
3 changed files with 32 additions and 23 deletions
|
@ -599,13 +599,13 @@ static void firebird_handle_closer(pdo_dbh_t *dbh) /* {{{ */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (H->date_format) {
|
if (H->date_format) {
|
||||||
efree(H->date_format);
|
zend_string_release_ex(H->date_format, false);
|
||||||
}
|
}
|
||||||
if (H->time_format) {
|
if (H->time_format) {
|
||||||
efree(H->time_format);
|
zend_string_release_ex(H->time_format, false);
|
||||||
}
|
}
|
||||||
if (H->timestamp_format) {
|
if (H->timestamp_format) {
|
||||||
efree(H->timestamp_format);
|
zend_string_release_ex(H->timestamp_format, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (H->einfo.errmsg) {
|
if (H->einfo.errmsg) {
|
||||||
|
@ -1091,10 +1091,9 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (H->date_format) {
|
if (H->date_format) {
|
||||||
efree(H->date_format);
|
zend_string_release_ex(H->date_format, false);
|
||||||
}
|
}
|
||||||
spprintf(&H->date_format, 0, "%s", ZSTR_VAL(str));
|
H->date_format = str;
|
||||||
zend_string_release_ex(str, 0);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1105,10 +1104,9 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (H->time_format) {
|
if (H->time_format) {
|
||||||
efree(H->time_format);
|
zend_string_release_ex(H->time_format, false);
|
||||||
}
|
}
|
||||||
spprintf(&H->time_format, 0, "%s", ZSTR_VAL(str));
|
H->time_format = str;
|
||||||
zend_string_release_ex(str, 0);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1119,10 +1117,9 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (H->timestamp_format) {
|
if (H->timestamp_format) {
|
||||||
efree(H->timestamp_format);
|
zend_string_release_ex(H->timestamp_format, false);
|
||||||
}
|
}
|
||||||
spprintf(&H->timestamp_format, 0, "%s", ZSTR_VAL(str));
|
H->timestamp_format = str;
|
||||||
zend_string_release_ex(str, 0);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1243,15 +1240,27 @@ static int pdo_firebird_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PDO_FB_ATTR_DATE_FORMAT:
|
case PDO_FB_ATTR_DATE_FORMAT:
|
||||||
ZVAL_STRING(val, H->date_format ? H->date_format : PDO_FB_DEF_DATE_FMT);
|
if (H->date_format) {
|
||||||
|
ZVAL_STR_COPY(val, H->date_format);
|
||||||
|
} else {
|
||||||
|
ZVAL_STRING(val, PDO_FB_DEF_DATE_FMT);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PDO_FB_ATTR_TIME_FORMAT:
|
case PDO_FB_ATTR_TIME_FORMAT:
|
||||||
ZVAL_STRING(val, H->time_format ? H->time_format : PDO_FB_DEF_TIME_FMT);
|
if (H->time_format) {
|
||||||
|
ZVAL_STR_COPY(val, H->time_format);
|
||||||
|
} else {
|
||||||
|
ZVAL_STRING(val, PDO_FB_DEF_TIME_FMT);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PDO_FB_ATTR_TIMESTAMP_FORMAT:
|
case PDO_FB_ATTR_TIMESTAMP_FORMAT:
|
||||||
ZVAL_STRING(val, H->timestamp_format ? H->timestamp_format : PDO_FB_DEF_TIMESTAMP_FMT);
|
if (H->timestamp_format) {
|
||||||
|
ZVAL_STR_COPY(val, H->timestamp_format);
|
||||||
|
} else {
|
||||||
|
ZVAL_STRING(val, PDO_FB_DEF_TIMESTAMP_FMT);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case PDO_FB_TRANSACTION_ISOLATION_LEVEL:
|
case PDO_FB_TRANSACTION_ISOLATION_LEVEL:
|
||||||
|
|
|
@ -93,7 +93,7 @@ static int get_formatted_time_tz(pdo_stmt_t *stmt, const ISC_TIME_TZ* timeTz, zv
|
||||||
}
|
}
|
||||||
time = fb_encode_time(hours, minutes, seconds, fractions);
|
time = fb_encode_time(hours, minutes, seconds, fractions);
|
||||||
isc_decode_sql_time(&time, &t);
|
isc_decode_sql_time(&time, &t);
|
||||||
fmt = S->H->time_format ? S->H->time_format : PDO_FB_DEF_TIME_FMT;
|
fmt = S->H->time_format ? ZSTR_VAL(S->H->time_format) : PDO_FB_DEF_TIME_FMT;
|
||||||
|
|
||||||
size_t len = strftime(timeBuf, sizeof(timeBuf), fmt, &t);
|
size_t len = strftime(timeBuf, sizeof(timeBuf), fmt, &t);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
|
@ -123,7 +123,7 @@ static int get_formatted_timestamp_tz(pdo_stmt_t *stmt, const ISC_TIMESTAMP_TZ*
|
||||||
ts.timestamp_time = fb_encode_time(hours, minutes, seconds, fractions);
|
ts.timestamp_time = fb_encode_time(hours, minutes, seconds, fractions);
|
||||||
isc_decode_timestamp(&ts, &t);
|
isc_decode_timestamp(&ts, &t);
|
||||||
|
|
||||||
fmt = S->H->timestamp_format ? S->H->timestamp_format : PDO_FB_DEF_TIMESTAMP_FMT;
|
fmt = S->H->timestamp_format ? ZSTR_VAL(S->H->timestamp_format) : PDO_FB_DEF_TIMESTAMP_FMT;
|
||||||
|
|
||||||
size_t len = strftime(timestampBuf, sizeof(timestampBuf), fmt, &t);
|
size_t len = strftime(timestampBuf, sizeof(timestampBuf), fmt, &t);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
|
@ -546,18 +546,18 @@ static int pdo_firebird_stmt_get_col(
|
||||||
break;
|
break;
|
||||||
case SQL_TYPE_DATE:
|
case SQL_TYPE_DATE:
|
||||||
isc_decode_sql_date((ISC_DATE*)var->sqldata, &t);
|
isc_decode_sql_date((ISC_DATE*)var->sqldata, &t);
|
||||||
fmt = S->H->date_format ? S->H->date_format : PDO_FB_DEF_DATE_FMT;
|
fmt = S->H->date_format ? ZSTR_VAL(S->H->date_format) : PDO_FB_DEF_DATE_FMT;
|
||||||
if (0) {
|
if (0) {
|
||||||
case SQL_TYPE_TIME:
|
case SQL_TYPE_TIME:
|
||||||
isc_decode_sql_time((ISC_TIME*)var->sqldata, &t);
|
isc_decode_sql_time((ISC_TIME*)var->sqldata, &t);
|
||||||
fmt = S->H->time_format ? S->H->time_format : PDO_FB_DEF_TIME_FMT;
|
fmt = S->H->time_format ? ZSTR_VAL(S->H->time_format) : PDO_FB_DEF_TIME_FMT;
|
||||||
} else if (0) {
|
} else if (0) {
|
||||||
case SQL_TIMESTAMP:
|
case SQL_TIMESTAMP:
|
||||||
{
|
{
|
||||||
ISC_TIMESTAMP timestamp = php_get_isc_timestamp_from_sqldata(var->sqldata);
|
ISC_TIMESTAMP timestamp = php_get_isc_timestamp_from_sqldata(var->sqldata);
|
||||||
isc_decode_timestamp(×tamp, &t);
|
isc_decode_timestamp(×tamp, &t);
|
||||||
}
|
}
|
||||||
fmt = S->H->timestamp_format ? S->H->timestamp_format : PDO_FB_DEF_TIMESTAMP_FMT;
|
fmt = S->H->timestamp_format ? ZSTR_VAL(S->H->timestamp_format) : PDO_FB_DEF_TIMESTAMP_FMT;
|
||||||
}
|
}
|
||||||
/* convert the timestamp into a string */
|
/* convert the timestamp into a string */
|
||||||
char buf[80];
|
char buf[80];
|
||||||
|
|
|
@ -73,9 +73,9 @@ typedef struct {
|
||||||
zend_ulong txn_isolation_level;
|
zend_ulong txn_isolation_level;
|
||||||
|
|
||||||
/* date and time format strings, can be set by the set_attribute method */
|
/* date and time format strings, can be set by the set_attribute method */
|
||||||
char *date_format;
|
zend_string *date_format;
|
||||||
char *time_format;
|
zend_string *time_format;
|
||||||
char *timestamp_format;
|
zend_string *timestamp_format;
|
||||||
|
|
||||||
unsigned sql_dialect:2;
|
unsigned sql_dialect:2;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue