| Tom May <tom@go2net.com> |
+----------------------------------------------------------------------+
*/
-
+
/* $Id$ */
{
if (le->type == le_result) {
sybase_link *sybase_ptr = ((sybase_result *) le->ptr)->sybase_ptr;
-
+
if (!sybase_ptr->valid) {
return 1;
}
}
efree(result->data);
}
-
+
if (result->fields) {
for (i=0; i<result->num_fields; i++) {
STR_FREE(result->fields[i].name);
if (ct_callback(sybase_globals->context, NULL, CS_SET, CS_CLIENTMSG_CB, (CS_VOID *)_client_message_handler)!=CS_SUCCEED) {
php_error(E_WARNING, "Sybase: Unable to set client message handler");
}
-
+
/* Set datetime conversion format to "Nov 3 1998 8:06PM".
* This is the default format for the ct-lib that comes with
* Sybase ASE 11.5.1 for Solaris, but the Linux libraries that
php_error(E_WARNING, "Sybase: Unable to allocate connection record");
return 0;
}
-
+
/* Note - this saves a copy of sybase, not a pointer to it. */
if (ct_con_props(sybase->connection, CS_SET, CS_USERDATA, &sybase, CS_SIZEOF(sybase), NULL)!=CS_SUCCEED) {
php_error(E_WARNING, "Sybase: Unable to set userdata");
break;
case 1: {
pval *yyhost;
-
+
if (getParameters(ht, 1, &yyhost)==FAILURE) {
RETURN_FALSE;
}
break;
case 2: {
pval *yyhost,*yyuser;
-
+
if (getParameters(ht, 2, &yyhost, &yyuser)==FAILURE) {
RETURN_FALSE;
}
break;
case 3: {
pval *yyhost,*yyuser,*yypasswd;
-
+
if (getParameters(ht, 3, &yyhost, &yyuser, &yypasswd) == FAILURE) {
RETURN_FALSE;
}
efree(hashed_details);
RETURN_FALSE;
}
-
+
sybase_ptr = (sybase_link *) le->ptr;
/* If the link has died, close it and overwrite it with a new one. */
ZEND_REGISTER_RESOURCE(return_value, sybase_ptr, le_plink);
} else { /* non persistent */
list_entry *index_ptr, new_index_ptr;
-
+
/* first we check the hash for the hashed_details key. if it exists,
* it should point us to the right offset where the actual sybase link sits.
* if it doesn't, open a new sybase link, add it to the resource list,
/* add it to the list */
ZEND_REGISTER_RESOURCE(return_value, sybase_ptr, le_link);
-
+
/* add it to the hash */
new_index_ptr.ptr = (void *) return_value->value.lval;
new_index_ptr.type = le_index_ptr;
pval *sybase_link_index = 0;
int id;
sybase_link *sybase_ptr;
-
+
switch (ZEND_NUM_ARGS()) {
case 0:
id = SybCtG(default_link);
WRONG_PARAM_COUNT;
break;
}
-
+
ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
+
if (id==-1) { /* explicit resource number */
zend_list_delete(Z_RESVAL_P(sybase_link_index));
}
- if (id!=-1
+ if (id!=-1
|| (sybase_link_index && Z_RESVAL_P(sybase_link_index)==SybCtG(default_link))) {
zend_list_delete(SybCtG(default_link));
SybCtG(default_link) = -1;
}
/* }}} */
-
+
static int exec_cmd(sybase_link *sybase_ptr, char *cmdbuf)
{
** Get a command handle, store the command string in it, and
** send it to the server.
*/
-
+
if (ct_command(sybase_ptr->cmd, CS_LANG_CMD, cmdbuf, CS_NULLTERM, CS_UNUSED)!=CS_SUCCEED) {
sybase_ptr->dead = 1;
return FAILURE;
sybase_ptr->dead = 1;
return FAILURE;
}
-
+
while ((retcode = ct_results(sybase_ptr->cmd, &restype))==CS_SUCCEED) {
switch ((int) restype) {
case CS_CMD_SUCCEED:
case CS_CMD_DONE:
break;
-
+
case CS_CMD_FAIL:
failure=1;
break;
-
+
case CS_STATUS_RESULT:
ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
break;
-
+
default:
failure=1;
break;
int id;
char *cmdbuf;
sybase_link *sybase_ptr;
-
+
switch(ZEND_NUM_ARGS()) {
case 1:
if (getParameters(ht, 1, &db)==FAILURE) {
WRONG_PARAM_COUNT;
break;
}
-
+
ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
+
convert_to_string(db);
cmdbuf = (char *) emalloc(sizeof("use ")+db->value.str.len+1);
sprintf(cmdbuf, "use %s", db->value.str.val); /* SAFE */
if (ct_res_info(sybase_ptr->cmd, CS_NUMDATA, &num_fields, CS_UNUSED, NULL)!=CS_SUCCEED) {
return NULL;
}
-
+
result = (sybase_result *) emalloc(sizeof(sybase_result));
result->data = (pval **) emalloc(sizeof(pval *)*SYBASE_ROWS_BLOCK);
result->fields = NULL;
datafmt = (CS_DATAFMT *) emalloc(sizeof(CS_DATAFMT)*num_fields);
numerics = (unsigned char *) emalloc(sizeof(unsigned char)*num_fields);
types = (CS_INT *) emalloc(sizeof(CS_INT)*num_fields);
-
+
for (i=0; i<num_fields; i++) {
ct_describe(sybase_ptr->cmd, i+1, &datafmt[i]);
datafmt[i].format = CS_FMT_NULLTERM;
ct_bind(sybase_ptr->cmd, i+1, &datafmt[i], tmp_buffer[i], &lengths[i], &indicators[i]);
}
-
+
while ((retcode=ct_fetch(sybase_ptr->cmd,CS_UNUSED,CS_UNUSED,CS_UNUSED,NULL))==CS_SUCCEED
|| retcode==CS_ROW_FAIL) {
/*
j=0;
for (i=0; i<num_fields; i++) {
char computed_buf[16];
-
+
if (datafmt[i].namelen>0) {
result->fields[i].name = estrndup(datafmt[i].name, datafmt[i].namelen);
} else {
Q_SUCCESS, /* Success but no results. */
Q_FAILURE, /* Failure, no results. */
} status;
-
+
switch(ZEND_NUM_ARGS()) {
case 1:
if (zend_get_parameters_ex(1, &query)==FAILURE) {
WRONG_PARAM_COUNT;
break;
}
-
+
ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, sybase_link_index, id, "Sybase-Link", le_link, le_plink);
-
+
convert_to_string_ex(query);
-
+
/* Fail if we already marked this connection dead. */
if (sybase_ptr->dead) {
case CS_CMD_FAIL:
status = Q_FAILURE;
break;
-
+
case CS_COMPUTE_RESULT:
case CS_CURSOR_RESULT:
case CS_PARAM_RESULT:
case CS_STATUS_RESULT:
ct_cancel(NULL, sybase_ptr->cmd, CS_CANCEL_CURRENT);
break;
-
+
default:
status = Q_FAILURE;
break;
{
pval *sybase_result_index;
sybase_result *result;
-
+
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
if (sybase_result_index->type==IS_RESOURCE
&& sybase_result_index->value.lval==0) {
RETURN_FALSE;
}
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
zend_list_delete(sybase_result_index->value.lval);
RETURN_TRUE;
}
{
pval *sybase_result_index;
sybase_result *result;
-
+
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
return_value->value.lval = result->num_rows;
return_value->type = IS_LONG;
}
{
pval *sybase_result_index;
sybase_result *result;
-
+
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
return_value->value.lval = result->num_fields;
return_value->type = IS_LONG;
}
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
if (result->cur_row >= result->num_rows) {
RETURN_FALSE;
}
-
+
array_init(return_value);
for (i=0; i<result->num_fields; i++) {
ALLOC_ZVAL(field_content);
sybase_result *result;
int i;
pval *tmp;
-
+
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &sybase_result_index)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
if (result->cur_row >= result->num_rows) {
RETURN_FALSE;
}
-
+
if (array_init(return_value)==FAILURE) {
RETURN_FALSE;
}
-
+
for (i=0; i<result->num_fields; i++) {
ALLOC_ZVAL(tmp);
*tmp = result->data[result->cur_row][i];
if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
php_error(E_WARNING, "Sybase: Bad row offset");
RETURN_FALSE;
}
-
+
result->cur_row = offset->value.lval;
RETURN_TRUE;
}
WRONG_PARAM_COUNT;
break;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
if (field_offset==-1) {
field_offset = result->cur_field;
result->cur_field++;
}
-
+
if (field_offset<0 || field_offset >= result->num_fields) {
if (ZEND_NUM_ARGS()==2) { /* field specified explicitly */
php_error(E_WARNING, "Sybase: Bad column offset");
if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &sybase_result_index, &offset)==FAILURE) {
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
-
+
convert_to_long(offset);
field_offset = offset->value.lval;
-
+
if (field_offset<0 || field_offset >= result->num_fields) {
php_error(E_WARNING, "Sybase: Bad column offset");
RETURN_FALSE;
WRONG_PARAM_COUNT;
}
-
+
ZEND_FETCH_RESOURCE(result, sybase_result *, &sybase_result_index, -1, "Sybase result", le_result);
convert_to_long(row);
pval *sybase_link_index;
sybase_link *sybase_ptr;
int id;
-
+
switch(ZEND_NUM_ARGS()) {
case 0:
id = php_sybase_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);
WRONG_PARAM_COUNT;
break;
}
-
+
ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
return_value->value.lval = sybase_ptr->affected_rows;
PHP_MINFO_FUNCTION(sybase)
{
char buf[32];
-
+
php_info_print_table_start();
php_info_print_table_header(2, "Sybase_CT Support", "enabled" );
sprintf(buf, "%ld", SybCtG(num_persistent));
PHP_FUNCTION(sybase_min_client_severity)
{
pval *severity;
-
+
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &severity)==FAILURE) {
WRONG_PARAM_COUNT;
}
PHP_FUNCTION(sybase_min_server_severity)
{
pval *severity;
-
+
if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &severity)==FAILURE) {
WRONG_PARAM_COUNT;
}