Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv32201

Modified Files:
        sql.mx sql_optimizer.mx 
Log Message:
sql - added the sql transaction start wrapper and made error messages
more informative.
sql_optimizer - checks for validaty of the replicator in case we are
running master/slave


U sql_optimizer.mx
Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.227
retrieving revision 1.228
diff -u -d -r1.227 -r1.228
--- sql_optimizer.mx    4 Sep 2009 11:52:34 -0000       1.227
+++ sql_optimizer.mx    6 Sep 2009 08:32:10 -0000       1.228
@@ -161,6 +161,7 @@
 #include "sql_scenario.h"
 #include "sql_gencode.h"
 #include "bpm/bpm_storage.h"
+#include "replicator.h"
 
 #define TOSMALL 10
 
@@ -450,7 +451,7 @@
 int
 SQLvalidatePipeline(void){
        int error= 0;
-       int mitosis= FALSE, deadcode= FALSE, mergetable= FALSE;
+       int mitosis= FALSE, deadcode= FALSE, mergetable= FALSE, replicator= 
FALSE;
        int i;
 
        if (optimizers[0] &&  strcmp(optimizers[0],"inline") ){
@@ -467,6 +468,9 @@
                else
                if (strcmp(optimizers[i],"mergetable") == 0)
                        mergetable= TRUE;
+               else
+               if (strcmp(optimizers[i],"replicator") == 0)
+                       replicator= TRUE;
 
 #ifdef WIN32
                else
@@ -488,6 +492,15 @@
                showException(SQL,"optimizer"," 'deadcode' should be used at 
least once\n");
                error++;
        }
+...@-
+For replicated databases we need to ensure that the corresponding optimizer
+is enabled.
+...@c
+       if ( MASTERroleEnabled() && replicator == FALSE){
+               showException(SQL,"optimizer"," 'replicator' should be part of 
the pipeline\n");
+               error++;
+       }
+
        return error;
 }
 
@@ -506,6 +519,9 @@
 
        for ( i = 0; i < 256; i++)
                optimizers[i] = NULL;
+       if (strcmp(optimizer,"default")==0)
+               optimizer= GDKstrdup(defaultPlan? defaultPlan:minimalPlan);
+
        optimizer=  base;
        while (optimizer && *optimizer ) {
                nxt = strchr(optimizer,',');
@@ -513,10 +529,7 @@
                        *nxt = 0;
                        nxt++;
                }
-               if (strcmp(optimizer,"default")==0){
-                       str base= GDKstrdup(defaultPlan? 
defaultPlan:minimalPlan);
-                       setOptimizers(base);
-               } else if ((nme = putName(optimizer,strlen(optimizer))) == 0)
+               if ((nme = putName(optimizer,strlen(optimizer))) == 0)
                        showException(SQL,"optimizer"," '%s' does not 
exist\n",optimizer);
                else if (top<255)
                        optimizers[top++] = nme; 

U sql.mx
Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.354
retrieving revision 1.355
diff -u -d -r1.354 -r1.355
--- sql.mx      4 Sep 2009 06:59:44 -0000       1.354
+++ sql.mx      6 Sep 2009 08:32:10 -0000       1.355
@@ -40,10 +40,15 @@
 address SQLinitEnvironment
 comment "Initialize the environment for MAL";
 
+pattern transaction():void
+address SQLtransaction
+comment "Start a transaction";
 pattern commit():void
-address SQLcommit;
+address SQLcommit
+comment "Commit the transaction";
 pattern rollback():void
-address SQLrollback;
+address SQLrollback
+comment "Abort the transaction";
 
 pattern eval(cmd:str):void 
 address SQLstatement
@@ -959,6 +964,7 @@
 extern BAT *mvc_bind_dbat(mvc *m, char *sname, char *tname, int access);
 extern BAT *mvc_bind_idxbat(mvc *m, char *sname, char *tname, char *iname, int 
access);
 
+sql5_export str SQLtransaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLcommit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLrollback(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
@@ -1339,16 +1345,31 @@
 }
 
 str
+SQLtransaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       mvc *m = NULL;
+       str msg = getContext(cntxt,mb, &m, NULL);
+
+       (void) cntxt;
+       (void) stk;
+       (void) pci;
+       if (msg)
+               return msg;
+       mvc_trans(m);
+       return MAL_SUCCEED;
+}
+
+str
 SQLcommit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        mvc *m = NULL;
        str msg = getContext(cntxt,mb, &m, NULL);
-       int *ret  = (int *) getArgReference(stk, pci, 0);
 
        (void) cntxt;
+       (void) stk;
+       (void) pci;
        if (msg)
                return msg;
-       *ret = 0;
        mvc_commit(m, 0, NULL); /* keep the changes */
        return MAL_SUCCEED;
 }
@@ -1357,12 +1378,12 @@
 {
        mvc *m=NULL;
        str msg = getContext(cntxt,mb, &m, NULL);
-       int *ret  = (int *) getArgReference(stk, pci, 0);
 
        (void) cntxt;
+       (void) stk;
+       (void) pci;
        if (msg)
                return msg;
-       *ret = 0;
        mvc_rollback(m, 0, NULL); /* keep the changes */
        return MAL_SUCCEED;
 }
@@ -1707,6 +1728,7 @@
        str *cname = (str *)getArgReference(stk, pci, 3);
        int *access = (int *)getArgReference(stk, pci, 4);
        oid lval,hval=0;
+       char buf[BUFSIZ];
 
        (void) cntxt;
        if (msg)
@@ -1725,7 +1747,8 @@
                BBPkeepref( *bid = b->batCacheid);
                return MAL_SUCCEED;
        }
-       throw(SQL, "mvc_bind", "limitation in transaction scope");
+       snprintf(buf,BUFSIZ,"Could not find %s.%s(%s)",*sname, *tname, *cname);
+       throw(SQL, "sql.bind", buf);
 }
 
 
@@ -1742,6 +1765,7 @@
        str *iname = (str *)getArgReference(stk, pci, 3);
        int *access = (int *)getArgReference(stk, pci, 4);
        oid lval,hval=0;
+       char buf[BUFSIZ];
 
        (void) cntxt;
        if (msg)
@@ -1760,7 +1784,8 @@
                BBPkeepref( *bid = b->batCacheid);
                return MAL_SUCCEED;
        }
-       throw(SQL, "mvc_bind_idxbat", "limitation in transaction scope");
+       snprintf(buf,BUFSIZ,"Could not find index %s for %s.%s",*iname,*sname, 
*tname);
+       throw(SQL, "sql.idxbind", buf);
 }
 
 str 
@@ -1770,6 +1795,7 @@
        Client cntxt = mal_clients+*clientid;
        str msg = getContext(cntxt, NULL, &m, NULL);
        BAT *b;
+       char buf[BUFSIZ];
 
        if (msg)
                return msg;
@@ -1780,7 +1806,8 @@
                BBPkeepref( *bid = b->batCacheid);
                return MAL_SUCCEED;
        }
-       throw(SQL, "mvc_bind_idxbat", "limitation in transaction scope");
+       snprintf(buf,BUFSIZ,"Could not find index %s for %s.%s",*i,*s, *t);
+       throw(SQL, "sql.idxbind", buf);
 }
 
 /*mvc_append_wrap(int *bid, str *sname, str *tname, str *cname, ptr d) */


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to