summaryrefslogtreecommitdiff
path: root/ext/pdo_dblib/dblib_stmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo_dblib/dblib_stmt.c')
-rw-r--r--ext/pdo_dblib/dblib_stmt.c265
1 files changed, 0 insertions, 265 deletions
diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c
deleted file mode 100644
index d4e77fae86..0000000000
--- a/ext/pdo_dblib/dblib_stmt.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2006 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Author: Wez Furlong <wez@php.net> |
- | Frank M. Kromann <frank@kromann.info> |
- +----------------------------------------------------------------------+
-*/
-
-/* $Id$ */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "pdo/php_pdo.h"
-#include "pdo/php_pdo_driver.h"
-#include "php_pdo_dblib.h"
-#include "php_pdo_dblib_int.h"
-#include "zend_exceptions.h"
-
-static void free_rows(pdo_dblib_stmt *S TSRMLS_DC)
-{
- int i, j;
-
- for (i = 0; i < S->nrows; i++) {
- for (j = 0; j < S->ncols; j++) {
- pdo_dblib_colval *val = &S->rows[i] + j;
- if (val->data) {
- efree(val->data);
- val->data = NULL;
- }
- }
- }
- efree(S->rows);
- S->rows = NULL;
- S->nrows = 0;
-}
-
-static int pdo_dblib_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
-
- if (S->rows) {
- free_rows(S TSRMLS_CC);
- }
- if (S->cols) {
- efree(S->cols);
- }
- efree(S);
-
- return 1;
-}
-
-static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
-{
- pdo_dbh_t *dbh = stmt->dbh;
- pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
- pdo_dblib_db_handle *H = S->H;
- RETCODE resret, ret;
- int i, j;
- int arows;
- unsigned int size;
-
- dbsetuserdata(H->link, &S->err);
-
- if (S->rows) {
- /* clean them up */
- free_rows(S TSRMLS_CC);
- }
-
- if (FAIL == dbcmd(H->link, stmt->active_query_string)) {
- return 0;
- }
- if (FAIL == dbsqlexec(H->link)) {
- return 0;
- }
-
- resret = dbresults(H->link);
- if (resret == FAIL) {
- return 0;
- }
-
- ret = dbnextrow(H->link);
-
- stmt->row_count = DBCOUNT(H->link);
-
- if (ret == NO_MORE_ROWS) {
- return 1;
- }
-
- if (!S->cols) {
- S->ncols = dbnumcols(H->link);
-
- if (S->ncols <= 0) {
- return 1;
- }
-
- S->cols = ecalloc(S->ncols, sizeof(pdo_dblib_col));
- stmt->column_count = S->ncols;
-
- for (i = 0, j = 0; i < S->ncols; i++) {
- S->cols[i].coltype = dbcoltype(H->link, i+1);
- S->cols[i].name = dbcolname(H->link, i+1);
- if (S->cols[i].name) {
- S->cols[i].name = estrdup(S->cols[i].name);
- } else if (j) {
- spprintf(&S->cols[i].name, 0, "computed%d", j++);
- } else {
- S->cols[i].name = estrdup("computed");
- j++;
- }
- S->cols[i].source = dbcolsource(H->link, i+1);
- S->cols[i].source = estrdup(S->cols[i].source ? S->cols[i].source : "");
- S->cols[i].maxlen = dbcollen(H->link, i+1);
- }
- }
-
- arows = 100;
- size = S->ncols * sizeof(pdo_dblib_colval);
- S->rows = emalloc(arows * size);
-
- /* let's fetch all the data */
- do {
- if (S->nrows >= arows) {
- arows *= 2;
- S->rows = erealloc(S->rows, arows * size);
- }
- for (i = 0; i < S->ncols; i++) {
- pdo_dblib_colval *val = &S->rows[S->nrows * S->ncols + i];
-
- if (dbdatlen(H->link, i+1) == 0 && dbdata(H->link, i+1) == NULL) {
- val->len = 0;
- val->data = NULL;
- } else {
- switch (S->cols[i].coltype) {
- case SQLCHAR:
- case SQLTEXT:
- case SQLVARBINARY:
- case SQLBINARY:
- case SQLIMAGE:
- val->len = dbdatlen(H->link, i+1);
- val->data = emalloc(val->len + 1);
- memcpy(val->data, dbdata(H->link, i+1), val->len);
- val->data[val->len] = '\0';
- break;
-
- default:
- if (dbwillconvert(S->cols[i].coltype, SQLCHAR)) {
- val->len = 32 + (2 * dbdatlen(H->link, i+1));
- val->data = emalloc(val->len);
-
- val->len = dbconvert(NULL, S->cols[i].coltype, dbdata(H->link, i+1),
- dbdatlen(H->link, i+1), SQLCHAR, val->data, val->len);
-
- if (val->len >= 0) {
- val->data[val->len] = '\0';
- }
- } else {
- val->len = 0;
- val->data = NULL;
- }
- }
- }
- }
-
- S->nrows++;
-
- ret = dbnextrow(H->link);
-
- if (ret == BUF_FULL) {
- dbclrbuf(H->link, DBLASTROW(H->link)-1);
- }
- } while (ret != FAIL && ret != NO_MORE_ROWS);
-
- if (resret != NO_MORE_RESULTS) {
- /* there are additional result sets available */
- dbresults(H->link);
- /* cancel pending rows */
- dbcanquery(H->link);
-
- /* TODO: figure out a sane solution */
- }
-
- S->current = -1;
-
- return 1;
-}
-
-static int pdo_dblib_stmt_fetch(pdo_stmt_t *stmt,
- enum pdo_fetch_orientation ori, long offset TSRMLS_DC)
-{
- pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
-
- if (!S->rows) {
- return 0;
- }
-
- if (++S->current < S->nrows) {
- return 1;
- }
-
- return 0;
-}
-
-static int pdo_dblib_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC)
-{
- pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
- struct pdo_column_data *col = &stmt->columns[colno];
-
- if (!S->rows) {
- return 0;
- }
-
- col->maxlen = S->cols[colno].maxlen;
- col->namelen = strlen(S->cols[colno].name);
- col->name = estrdup(S->cols[colno].name);
- col->param_type = PDO_PARAM_STR;
-
- return 1;
-}
-
-static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr,
- unsigned long *len, int *caller_frees TSRMLS_DC)
-{
- pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
- pdo_dblib_colval *val = &S->rows[S->current * S->ncols + colno];
-
- *ptr = val->data;
- *len = val->len;
- return 1;
-}
-
-static int pdo_dblib_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *param,
- enum pdo_param_event event_type TSRMLS_DC)
-{
- return 1;
-}
-
-
-struct pdo_stmt_methods dblib_stmt_methods = {
- pdo_dblib_stmt_dtor,
- pdo_dblib_stmt_execute,
- pdo_dblib_stmt_fetch,
- pdo_dblib_stmt_describe,
- pdo_dblib_stmt_get_col,
- pdo_dblib_stmt_param_hook,
- NULL, /* set attr */
- NULL, /* get attr */
- NULL, /* meta */
-};
-