convert_to_string(parameter);
zval_dtor(parameter);
- Z_STRLEN_P(parameter) = param->max_value_len;
- Z_STR_P(parameter) = ecalloc(1, Z_STRLEN_P(parameter)+1);
+ Z_STR_P(parameter) = zend_string_alloc(param->max_value_len, 1);
P->used_for_output = 1;
P->actual_len = (ub4) Z_STRLEN_P(parameter);
*alenpp = &P->actual_len;
- *bufpp = Z_STRVAL_P(parameter);
+ *bufpp = (Z_STR_P(parameter))->val;
*piecep = OCI_ONE_PIECE;
*rcodepp = &P->retcode;
*indpp = &P->indicator;
zval_dtor(parameter);
ZVAL_UNDEF(parameter);
} else if (Z_TYPE_P(parameter) == IS_STRING) {
- Z_STRLEN_P(parameter) = P->actual_len;
- Z_STR_P(parameter) = erealloc(Z_STRVAL_P(parameter), P->actual_len+1);
- Z_STRVAL_P(parameter)[P->actual_len] = '\0';
+ Z_STR_P(parameter) = zend_string_init(Z_STRVAL_P(parameter), P->actual_len, 1);
}
} else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB && P->thing) {
php_stream *stm;
return 1;
} /* }}} */
+struct _oci_lob_env {
+ OCISvcCtx *svc;
+ OCIError *err;
+};
+typedef struct _oci_lob_env oci_lob_env;
+
struct oci_lob_self {
pdo_stmt_t *stmt;
pdo_oci_stmt *S;
OCILobLocator *lob;
+ oci_lob_env *E;
ub4 offset;
};
sword r;
amt = (ub4) count;
- r = OCILobWrite(self->S->H->svc, self->S->err, self->lob,
+ r = OCILobWrite(self->E->svc, self->E->err, self->lob,
&amt, self->offset, (char*)buf, (ub4) count,
OCI_ONE_PIECE,
NULL, NULL, 0, SQLCS_IMPLICIT);
sword r;
amt = (ub4) count;
- r = OCILobRead(self->S->H->svc, self->S->err, self->lob,
+ r = OCILobRead(self->E->svc, self->E->err, self->lob,
&amt, self->offset, buf, (ub4) count,
NULL, NULL, 0, SQLCS_IMPLICIT);
/* pdo_stmt_t *stmt = self->stmt; */
if (close_handle) {
- OCILobClose(self->S->H->svc, self->S->err, self->lob);
+ OCILobClose(self->E->svc, self->E->err, self->lob);
+ efree(self->E);
efree(self);
}
static int oci_blob_flush(php_stream *stream)
{
struct oci_lob_self *self = (struct oci_lob_self*)stream->abstract;
- OCILobFlushBuffer(self->S->H->svc, self->S->err, self->lob, 0);
+ OCILobFlushBuffer(self->E->svc, self->E->err, self->lob, 0);
return 0;
}
self->offset = 1; /* 1-based */
self->stmt = stmt;
self->S = (pdo_oci_stmt*)stmt->driver_data;
+ self->E = ecalloc(1, sizeof(oci_lob_env));
+ self->E->svc = self->S->H->svc;
+ self->E->err = self->S->err;
stm = php_stream_alloc(&oci_blob_stream_ops, self, 0, "r+b");