1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-22 12:22:45 +03:00

Version 06-30-0248

This commit is contained in:
Byron Nikolaidis
1998-07-22 23:47:48 +00:00
parent 2a67742412
commit 6e66468f3a
39 changed files with 4546 additions and 283 deletions

View File

@@ -12,6 +12,10 @@
*
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "statement.h"
#include "bind.h"
#include "connection.h"
@@ -19,12 +23,25 @@
#include "convert.h"
#include "environ.h"
#include <stdio.h>
#include <string.h>
#ifdef HAVE_IODBC
#include "iodbc.h"
#include "isql.h"
#else
#include <windows.h>
#include <sql.h>
#endif
extern GLOBAL_VALUES globals;
#ifdef UNIX
#if !HAVE_STRICMP
#define stricmp(s1,s2) strcasecmp(s1,s2)
#define strnicmp(s1,s2,n) strncasecmp(s1,s2,n)
#endif
#endif
/* Map sql commands to statement types */
static struct {
int type;
@@ -45,6 +62,19 @@ static struct {
RETCODE SQL_API SQLAllocStmt(HDBC hdbc,
HSTMT FAR *phstmt)
{
return _SQLAllocStmt(hdbc, phstmt);
}
RETCODE SQL_API SQLFreeStmt(HSTMT hstmt,
UWORD fOption)
{
return _SQLFreeStmt(hstmt, fOption);
}
RETCODE SQL_API _SQLAllocStmt(HDBC hdbc,
HSTMT FAR *phstmt)
{
char *func="SQLAllocStmt";
ConnectionClass *conn = (ConnectionClass *) hdbc;
@@ -82,7 +112,7 @@ StatementClass *stmt;
}
RETCODE SQL_API SQLFreeStmt(HSTMT hstmt,
RETCODE SQL_API _SQLFreeStmt(HSTMT hstmt,
UWORD fOption)
{
char *func="SQLFreeStmt";
@@ -145,6 +175,7 @@ StatementClass *stmt = (StatementClass *) hstmt;
}
/**********************************************************************
* StatementClass implementation
*/
@@ -185,6 +216,12 @@ StatementClass *rv;
rv->lobj_fd = -1;
rv->internal = FALSE;
rv->cursor_name[0] = '\0';
rv->ti = NULL;
rv->fi = NULL;
rv->ntab = 0;
rv->nfld = 0;
rv->parse_status = STMT_PARSE_NONE;
}
return rv;
}
@@ -218,6 +255,27 @@ SC_Destructor(StatementClass *self)
if (self->bindings)
free(self->bindings);
/* Free the parsed table information */
if (self->ti) {
int i;
for (i = 0; i < self->ntab; i++) {
free(self->ti[i]);
}
free(self->ti);
}
/* Free the parsed field information */
if (self->fi) {
int i;
for (i = 0; i < self->nfld; i++) {
free(self->fi[i]);
}
free(self->fi);
}
free(self);
mylog("SC_Destructor: EXIT\n");
@@ -266,7 +324,6 @@ int i;
}
int
statement_type(char *statement)
{
@@ -279,6 +336,7 @@ int i;
return STMT_TYPE_OTHER;
}
/* Called from SQLPrepare if STMT_PREMATURE, or
from SQLExecute if STMT_FINISHED, or
from SQLFreeStmt(SQL_CLOSE)
@@ -328,6 +386,29 @@ ConnectionClass *conn;
return FALSE;
}
/* Free the parsed table information */
if (self->ti) {
int i;
for (i = 0; i < self->ntab; i++) {
free(self->ti[i]);
}
free(self->ti);
self->ti = NULL;
self->ntab = 0;
}
/* Free the parsed field information */
if (self->fi) {
int i;
for (i = 0; i < self->nfld; i++) {
free(self->fi[i]);
}
free(self->fi);
self->fi = NULL;
self->nfld = 0;
}
self->parse_status = STMT_PARSE_NONE;
/* Free any cursors */
if (self->result) {
@@ -359,7 +440,7 @@ ConnectionClass *conn;
void
SC_pre_execute(StatementClass *self)
{
mylog("SC_pre_execute: status = %d\n", self->status);
if (self->status == STMT_READY) {
@@ -515,6 +596,7 @@ Int2 oldstatus, numcols;
mylog(" Sending SELECT statement on stmt=%u, cursor_name='%s'\n", self, self->cursor_name);
/* send the declare/select */
self->result = CC_send_query(conn, self->stmt_with_params, NULL, NULL);