summaryrefslogtreecommitdiffstats
path: root/Modules/sybasemodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/sybasemodule.c')
-rw-r--r--Modules/sybasemodule.c309
1 files changed, 0 insertions, 309 deletions
diff --git a/Modules/sybasemodule.c b/Modules/sybasemodule.c
deleted file mode 100644
index 860203f..0000000
--- a/Modules/sybasemodule.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
-Subject: Re: Sybase module -- input sought
-From: jredford@lehman.com
-To: ags@uncompaghre.informatics.jax.org (Alexander G. Smith)
-Cc: python-list@cwi.nl
-Date: Tue, 10 May 94 11:53:13 -0400
-
-
-input sought? how about a complete module? :)
-
-This is a fairly incomplete work.. but I have done things dramatically
-differently than sybperl would. Given the nature of the language I
-find it is easier to simply get ALL results & then muck with the rows
-later as parts of the data. This is a subset of the functionality of a
-Modula-3 interface to Sybase that I wrote.. I could send you that if
-you are interested in a more complete picture.
-*/
-
-#include <stdio.h>
-
-#include <sybfront.h>
-#include <sybdb.h>
-
-#include "allobjects.h"
-#include "modsupport.h"
-
-
-static object *SybaseError; /* exception sybase.error */
-
-
-typedef struct {
- OB_HEAD
- LOGINREC *login; /* login record */
- DBPROCESS *dbproc; /* login record */
-} sybdbobject;
-
-extern typeobject SybDbtype; /* Forward */
-
-
-static sybdbobject *
- newsybdbobject(char *user, char *passwd, char *server)
-{
- sybdbobject *s;
-
- s = NEWOBJ(sybdbobject, &SybDbtype);
- if (s != NULL) {
- s->login = dblogin();
- if (user) {
- (void)DBSETLUSER(s->login, user);
- }
- if (passwd) {
- (void)DBSETLPWD(s->login, passwd);
- }
- if(!(s->dbproc = dbopen(s->login, server))) {
- dbloginfree(s->login);
- DEL(s);
- return (NULL);
- }
- }
- return s;
-}
-
-/* OBJECT FUNCTIONS: sybdb */
-
-/* Common code for returning pending results */
-static object
- *getresults (DBPROCESS *dbp)
-{
- object *results;
- object *list;
- object *tuple;
- object *o;
- int retcode;
- int cols;
- int *fmt;
- int i;
-
- results = newlistobject(0);
- while ((retcode = dbresults(dbp)) != NO_MORE_RESULTS) {
- if (retcode == SUCCEED && DBROWS(dbp) == SUCCEED) {
- list = newlistobject(0);
- cols = dbnumcols(dbp);
- fmt = (int *)malloc(sizeof(int) * cols);
- for (i = 1; i <= cols; i++) {
- switch(dbcoltype(dbp, i)) {
- case SYBCHAR:
- fmt[i-1] = SYBCHAR;
- break;
- case SYBINT1:
- fmt[i-1] = SYBINT1;
- break;
- case SYBINT2:
- fmt[i-1] = SYBINT2;
- break;
- case SYBINT4:
- fmt[i-1] = SYBINT4;
- break;
- case SYBFLT8:
- fmt[i-1] = SYBFLT8;
- break;
- }
- }
- while (dbnextrow(dbp) != NO_MORE_ROWS) {
- tuple = newtupleobject(cols);
- for (i = 1; i <= cols; i++) {
- switch(fmt[i-1]) {
- case SYBCHAR:
- o = newsizedstringobject((char *)dbdata(dbp, i), dbdatlen(dbp, i));
- settupleitem(tuple, i-1, o);
- break;
- case SYBINT1:
- o = newintobject(*((char *)dbdata(dbp, i)));
- settupleitem(tuple, i-1, o);
- break;
- case SYBINT2:
- o = newintobject(*((short *)dbdata(dbp, i)));
- settupleitem(tuple, i-1, o);
- break;
- case SYBINT4:
- o = newintobject(*((int *)dbdata(dbp, i)));
- settupleitem(tuple, i-1, o);
- break;
- case SYBFLT8:
- o = newfloatobject(*((double *)dbdata(dbp, i)));
- settupleitem(tuple, i-1, o);
- break;
- }
- }
- addlistitem(list,tuple);
- }
- free(fmt);
- addlistitem(results,list);
- }
- }
- return (results);
-}
-
-static object
- *sybdb_sql (self, args)
-object *self;
-object *args;
-{
- char *sql;
- DBPROCESS *dbp;
-
- dbp = ((sybdbobject *)self)->dbproc;
- err_clear ();
- if (!getargs (args, "s", &sql)) {
- return NULL;
- }
- dbcancel(dbp);
- dbcmd(dbp, sql);
- dbsqlexec(dbp);
- return getresults(dbp);
-}
-
-static object
- *sybdb_sp (self, args)
-object *self;
-object *args;
-{
- char *sp;
- DBPROCESS *dbp;
- object *spargs;
- object *sparg;
- object *results;
- object *r;
- int spargcnt;
- int i;
- int retstatus;
-
- dbp = ((sybdbobject *)self)->dbproc;
- err_clear ();
- if (!getargs (args, "(sO)", &sp, &spargs)) {
- return NULL;
- }
-
- dbcancel(dbp);
- dbrpcinit(dbp, sp, 0);
-
- if (is_tupleobject(spargs)) {
- spargcnt=gettuplesize(spargs);
- for (i=0; i < spargcnt; i++) {
- sparg = gettupleitem(spargs,i);
- if (is_intobject(sparg)) {
- int i;
- i = getintvalue(sparg);
- dbrpcparam(dbp, NULL, 0, SYBINT4, -1, -1, &i);
- } else if (is_floatobject(sparg)) {
- double i;
- i = getfloatvalue(sparg);
- dbrpcparam(dbp, NULL, 0, SYBFLT8, -1, -1, &i);
- } else if (is_stringobject(sparg)) {
- dbrpcparam(dbp, NULL, 0, SYBCHAR, -1, getstringsize(sparg), getstringvalue(sparg));
- } else {
- err_setstr (SybaseError, "Could not handle paramaters to procedure.");
- return NULL;
- }
- }
- } else if (spargs != None) {
- err_setstr (SybaseError, "Could not handle paramaters to procedure.");
- return NULL;
- }
- dbrpcsend(dbp);
- dbsqlok(dbp);
-
- results = getresults(dbp);
- retstatus = dbretstatus(dbp);
-
- r = mkvalue("(iO)", retstatus, results);
- DECREF(results);
- return (r);
-}
-
-
-static struct methodlist sybdb_methods[] = {
- {"sql", sybdb_sql},
- {"sp", sybdb_sp},
- {NULL, NULL} /* sentinel */
-};
-
-static void
-sybdb_dealloc(s)
- sybdbobject *s;
-{
- dbloginfree(s->login);
- dbclose(s->dbproc);
- DEL(s);
-}
-
-static object *
-sybdb_getattr(s, name)
- sybdbobject *s;
- char *name;
-{
- return findmethod(sybdb_methods, (object *) s, name);
-}
-
-
-typeobject SybDbtype = {
- OB_HEAD_INIT(&Typetype)
- 0,
- "sybdb",
- sizeof(sybdbobject),
- 0,
- sybdb_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- sybdb_getattr, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
-};
-
-
-
-
-
-/* MODULE FUNCTIONS: sybase */
-
-static object
- *sybase_new (self, args)
-object *self; /* Not used */
-object *args;
-{
- char *user, *passwd, *server;
- object *db;
-
- err_clear ();
- if (!getargs (args, "(zzz)", &user, &passwd, &server)) {
- return NULL;
- }
- db = (object *) newsybdbobject(user, passwd, server);
- if (!db) {
- /* XXX Should be setting some errstr stuff here based on sybase errors */
- err_setstr (SybaseError, "Could not open connection to server.");
- return NULL;
- }
- return db;
-}
-
-
-/* List of module functions */
-static struct methodlist sybase_methods[]=
-{
- {"new", sybase_new},
- {NULL, NULL} /* sentinel */
-};
-
-/* Module initialisation */
-void initsybase ()
-{
- object *m, *d;
-
- /* Create the module and add the functions */
- m = initmodule ("sybase", sybase_methods);
- /* Add some symbolic constants to the module */
- d = getmoduledict (m);
- SybaseError = newstringobject ("sybase.error");
- if (SybaseError == NULL || dictinsert (d, "error", SybaseError) != 0) {
- fatal ("can't define sybase.error");
- }
- /* Check for errors */
- if (err_occurred ()){
- fatal ("can't initialize module sybase");
- }
-}