From a96192fd83ec4d8125cb4d96fb12bc9b2e82ddea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Thu, 23 Mar 2000 18:35:04 -0800
Subject: [PATCH] now compiles in 0.6

Rev: src/modules/Oracle/module.pmod.in:1.2
Rev: src/modules/Oracle/oracle.c:1.23
---
 src/modules/Oracle/module.pmod.in |  4 +-
 src/modules/Oracle/oracle.c       | 66 ++++++++++++++++++++++---------
 2 files changed, 50 insertions(+), 20 deletions(-)

diff --git a/src/modules/Oracle/module.pmod.in b/src/modules/Oracle/module.pmod.in
index 8568e6d414..62cab62420 100644
--- a/src/modules/Oracle/module.pmod.in
+++ b/src/modules/Oracle/module.pmod.in
@@ -1,8 +1,8 @@
-inherit @module@;
+inherit @module@ : M;
 
 class oracle
 {
-  inherit @module@.oracle : O;
+  inherit M::oracle : O;
 
   object big_query(object(compile_query)|string query,
 		      void|mapping(int|string:int|float|string|multiset(string)) binds,
diff --git a/src/modules/Oracle/oracle.c b/src/modules/Oracle/oracle.c
index d3d2345850..21cda7e58f 100644
--- a/src/modules/Oracle/oracle.c
+++ b/src/modules/Oracle/oracle.c
@@ -1,5 +1,5 @@
 /*
- * $Id: oracle.c,v 1.22 2000/03/24 01:22:17 hubbe Exp $
+ * $Id: oracle.c,v 1.23 2000/03/24 02:35:04 hubbe Exp $
  *
  * Pike interface to Oracle databases.
  *
@@ -31,13 +31,14 @@
 #include "multiset.h"
 #include "builtin_functions.h"
 #include "opcodes.h"
+#include "pike_macros.h"
 
 #ifdef HAVE_ORACLE
 
 #include <oci.h>
 #include <math.h>
 
-RCSID("$Id: oracle.c,v 1.22 2000/03/24 01:22:17 hubbe Exp $");
+RCSID("$Id: oracle.c,v 1.23 2000/03/24 02:35:04 hubbe Exp $");
 
 
 #define BLOB_FETCH_CHUNK 16384
@@ -92,23 +93,52 @@ DEFINE_MUTEX(oracle_serialization_mutex);
 #endif
 
 #ifndef ADD_FUNCTION
+
 #define ADD_FUNCTION add_function
+#define ADD_STORAGE(X) add_storage(sizeof(X))
 #define tNone ""
-#define tFunc(X,Y) 
 #define tInt "int"
 #define tStr "string"
-#define tStr "float"
+#define tFlt "float"
 #define tObj "object"
 #define tVoid "void"
+#define tMix "mixed"
 
 #define tMap(X,Y) "mapping(" X ":" Y ")"
 #define tOr(X,Y) X "|" Y
 #define tArr(X) "array(" X ")"
 #define tFunc(X,Y) "function(" X ":" Y ")"
 #define tFuncV(X,Z,Y) "function(" X Z "...:" Y ")"
+#define tComma ","
+
+#define string_builder dynamic_buffer_s
+#define init_string_builder(X,Y) initialize_buf(X)
+#define string_builder_allocate(X,Y,Z) low_make_buf_space(Y,X);
+#define finish_string_builder(X) low_free_buf(X)
+#define free_string_builder(X) toss_buffer(X)
+
+#define STRING_BUILDER_STR(X) ((X).s.str)
+#define STRING_BUILDER_LEN(X) ((X).s.len)
+#include "dynamic_buffer.h"
+
+#else
+#define STRING_BUILDER_STR(X) ((X).s)
+#define STRING_BUILDER_LEN(X) ((X).s->len)
+#define tComma ""
+
 #endif
 
+
+#ifndef CURRENT_STORAGE
+#define CURRENT_STORAGE (fp->current_storage)
+#endif
+
+#ifdef DEBUG_MALLOC
 #define THISOBJ dmalloc_touch(struct pike_frame *,fp)->current_object
+#else
+#define THISOBJ (fp->current_object)
+#endif
+
 #define PARENTOF(X) ((X)->parent)
 
 #define THIS_DBCON ((struct dbcon *)(CURRENT_STORAGE))
@@ -444,11 +474,11 @@ static sb4 output_callback(struct inout *inout,
     case SQLT_STR:
     case SQLT_LBI:
     case SQLT_LNG:
-      if(!inout->output.s)
+      if(!STRING_BUILDER_STR(inout->output))
       {
 	init_string_builder(& inout->output,0);
       }else{
-	inout->output.s->len+=inout->xlen-BLOCKSIZE;
+	STRING_BUILDER_LEN(inout->output)+=inout->xlen-BLOCKSIZE;
 	inout->xlen=0;
       }
       
@@ -765,11 +795,12 @@ static void push_inout_value(struct inout *inout)
     case SQLT_LNG:
     case SQLT_CHR:
     case SQLT_STR:
-      inout->output.s->len+=inout->xlen-BLOCKSIZE;
-      if(inout->ftype == SQLT_STR) inout->output.s->len--;
+      STRING_BUILDER_LEN(inout->output)+=inout->xlen-BLOCKSIZE;
+      if(inout->ftype == SQLT_STR) 
+	STRING_BUILDER_LEN(inout->output)--;
       inout->xlen=0;
       push_string(finish_string_builder(& inout->output));
-      inout->output.s=0;;
+      STRING_BUILDER_STR(inout->output)=0;;
       break;
 
     case SQLT_ODT:
@@ -795,7 +826,7 @@ static void push_inout_value(struct inout *inout)
 
 static void init_inout(struct inout *i)
 {
-  i->output.s=0;
+  STRING_BUILDER_STR(i->output)=0;
   i->has_output=0;
   i->xlen=0;
   i->len=0;
@@ -804,7 +835,7 @@ static void init_inout(struct inout *i)
 
 static void free_inout(struct inout *i)
 {
-  if(i->output.s)
+  if(STRING_BUILDER_STR(i->output))
   {
     free_string_builder(& i->output);
     init_inout(i);
@@ -1373,7 +1404,8 @@ static void f_big_query_create(INT32 args)
     }
   }
 
-  CALL_AND_UNSET_ONERROR(err);
+  free_bind_block(&bind);
+  UNSET_ONERROR(err);
 }
 
 void dbdate_create(INT32 args)
@@ -1532,7 +1564,7 @@ void pike_module_init(void)
 
       MY_START_CLASS(dbresult); {
 	ADD_FUNCTION("create", f_big_query_create,
-		     tFunc(tOr(tVoid,tMap(tStr,tMix)) tOr(tVoid,tInt) tOr(tVoid,tObj),tVoid), ID_PUBLIC);
+		     tFunc(tOr(tVoid,tMap(tStr,tMix)) tComma tOr(tVoid,tInt) tComma tOr(tVoid,tObj),tVoid), ID_PUBLIC);
 	
 	/* function(:int) */
 	ADD_FUNCTION("num_fields", f_num_fields,tFunc(tNone,tInt), ID_PUBLIC);
@@ -1558,8 +1590,8 @@ void pike_module_init(void)
 	map_variable("length","int",0,offset+OFFSETOF(dbresultinfo, length), T_INT);
 	map_variable("decimals","int",0,offset+OFFSETOF(dbresultinfo, decimals), T_INT);
 	
-	ADD_FUNCTION("`->=",protect_dbresultinfo,tFunc(tStr tMix,tVoid),0);
-	ADD_FUNCTION("`[]=",protect_dbresultinfo,tFunc(tStr tMix,tVoid),0);
+	ADD_FUNCTION("`->=",protect_dbresultinfo,tFunc(tStr tComma tMix,tVoid),0);
+	ADD_FUNCTION("`[]=",protect_dbresultinfo,tFunc(tStr tComma tMix,tVoid),0);
 	MY_END_CLASS(dbresultinfo);
       }
 
@@ -1569,10 +1601,8 @@ void pike_module_init(void)
 #endif
     }
 
-    /* function(string|void, string|void, string|void, string|void:void) */
-    ADD_FUNCTION("create", f_oracle_create,tFunc(tOr(tStr,tVoid) tOr(tStr,tVoid) tOr(tStr,tVoid) tOr(tStr,tVoid),tVoid), ID_PUBLIC);
+    ADD_FUNCTION("create", f_oracle_create,tFunc(tOr(tStr,tVoid) tComma tOr(tStr,tVoid) tComma tOr(tStr,tVoid) tComma tOr(tStr,tVoid),tVoid), ID_PUBLIC);
     
-    /* function(string,mapping(int|string:int|float|string|multiset(string))|void:object) */
     MY_END_CLASS(oracle);
   }
 
-- 
GitLab