Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv1316
Modified Files:
sql.mx sql_gencode.mx sql_optimizer.mx
Log Message:
The garbage collection administration has been changed. Every variable record
now comes with an end-of-life field (eolife), which denotes the instruction
whereafter
the BAT variable reference counter can be decremented. The garbage collector is
never called automagically on MAL functions, because there may be other
pressing needs to retain them. This means that MAL functions defined and
used in the context of SQL, and which are not inlined, may cause a leakage.
The garbage collection has become part of each interpreter step.
The new approach makes the SQL/MAL plans half te size as before.
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.357
retrieving revision 1.358
diff -u -d -r1.357 -r1.358
--- sql_gencode.mx 27 Feb 2010 19:27:45 -0000 1.357
+++ sql_gencode.mx 14 Mar 2010 08:25:48 -0000 1.358
@@ -1563,8 +1563,8 @@
char *n = (s->type==st_append_col)?appendRef:updateRef;
q = newStmt2(mb, sqlRef, n);
- getArg(q, 0) = sql->mvc_var;
q = pushArgument(mb, q, sql->mvc_var);
+ getArg(q, 0) = sql->mvc_var=
newTmpVariable(mb,TYPE_ptr);
q = pushSchema(mb, q, c->t);
q = pushStr(mb, q, c->t->base.name);
q = pushStr(mb, q, c->base.name);
@@ -1579,8 +1579,8 @@
char *n = (s->type==st_append_idx)?appendRef:updateRef;
q = newStmt2(mb, sqlRef, n);
- getArg(q, 0) = sql->mvc_var;
q = pushArgument(mb, q, sql->mvc_var);
+ getArg(q, 0) = sql->mvc_var=
newTmpVariable(mb,TYPE_ptr);
q = pushSchema(mb, q, i->t);
q = pushStr(mb, q, i->t->base.name);
q = pushStr(mb, q, i->base.name);
@@ -1592,8 +1592,8 @@
sql_table *t = s->op1.tval;
q = newStmt1(mb, sqlRef, "delete");
- getArg(q, 0) = sql->mvc_var;
q = pushArgument(mb, q, sql->mvc_var);
+ getArg(q, 0) = sql->mvc_var=
newTmpVariable(mb,TYPE_ptr);
q = pushSchema(mb, q, t);
q = pushStr(mb, q, t->base.name);
q = pushArgument(mb, q, r);
@@ -1883,6 +1883,8 @@
getArg(q,0) = bvar;
q->argc = q->retc = 1;
q->barrier= EXITsymbol;
+ q = newStmt1(mb, sqlRef, "mvc");
+ sql->mvc_var = getDestVar(q);
} break;
case st_if: {
int c,t,e;
@@ -1896,6 +1898,8 @@
getArg(q,0)= t;
q->argc= q->retc=1;
q->barrier= EXITsymbol;
+ q = newStmt1(mb, sqlRef, "mvc");
+ sql->mvc_var = getDestVar(q);
q= newStmt1(mb, calcRef, "not");
q->barrier= BARRIERsymbol;
@@ -1907,6 +1911,8 @@
getArg(q,0)= e;
q->argc= q->retc=1;
q->barrier= EXITsymbol;
+ q = newStmt1(mb, sqlRef, "mvc");
+ sql->mvc_var = getDestVar(q);
} break;
case st_return: {
int c = _dumpstmt(sql,mb, s->op1.stval);
Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.244
retrieving revision 1.245
diff -u -d -r1.244 -r1.245
--- sql_optimizer.mx 27 Feb 2010 19:27:47 -0000 1.244
+++ sql_optimizer.mx 14 Mar 2010 08:25:48 -0000 1.245
@@ -453,7 +453,7 @@
str
SQLvalidatePipeline(void){
- int mitosis= FALSE, deadcode= FALSE, mergetable= FALSE, replication=
FALSE;
+ int mitosis= FALSE, deadcode= FALSE, mergetable= FALSE, replication=
FALSE, multiplex=FALSE, garbage=FALSE;
int i;
mal_set_lock(sql_contextLock,"SQL optimizer");
@@ -475,6 +475,12 @@
else
if (strcmp(optimizers[i],"replication") == 0)
replication= TRUE;
+ else
+ if (strcmp(optimizers[i],"multiplex") == 0)
+ multiplex= TRUE;
+ else
+ if (strcmp(optimizers[i],"garbageCollector") == 0 &&
optimizers[i+1] == 0)
+ garbage= TRUE;
#ifdef WIN32
else
@@ -488,14 +494,18 @@
throw(SQL,"optimizer"," 'mitosis' needs 'mergetable'\n");
}
- if ( --i >= 0 && optimizers[i] && strcmp(optimizers[i],"multiplex") ){
+ if (optimizers[0] && multiplex == 0){
mal_unset_lock(sql_contextLock,"SQL optimizer");
- throw(SQL,"optimizer"," 'multiplex' should be the last\n");
+ throw(SQL,"optimizer"," 'multiplex' should be used\n");
}
if (optimizers[0] && deadcode == FALSE ){
mal_unset_lock(sql_contextLock,"SQL optimizer");
throw(SQL,"optimizer"," 'deadcode' should be used at least
once\n");
}
+ if (optimizers[0] && garbage == FALSE ){
+ mal_unset_lock(sql_contextLock,"SQL optimizer");
+ throw(SQL,"optimizer"," 'garbageCollector' should be used as
the last one\n");
+ }
@-
For replicated databases we need to ensure that the corresponding optimizer
is enabled.
Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.404
retrieving revision 1.405
diff -u -d -r1.404 -r1.405
--- sql.mx 27 Feb 2010 19:27:40 -0000 1.404
+++ sql.mx 14 Mar 2010 08:25:45 -0000 1.405
@@ -68,19 +68,19 @@
address SQLstatement
comment "Compile and execute a single sql statement (and optionaly send output
on the output stream)";
-pattern assert{unsafe}(b:bit,msg:str):void
+pattern assert(b:bit,msg:str):void
address SQLassert
comment "Generate an exception when b==true";
-pattern assert{unsafe}(b:int,msg:str):void
+pattern assert(b:int,msg:str):void
address SQLassertInt
comment "Generate an exception when b!=0";
-pattern assert{unsafe}(b:wrd,msg:str):void
+pattern assert(b:wrd,msg:str):void
address SQLassertWrd
comment "Generate an exception when b!=0";
-pattern assert{unsafe}(b:lng,msg:str):void
+pattern assert(b:lng,msg:str):void
address SQLassertLng
comment "Generate an exception when b!=0";
@- The SQL multi-version catalog
@@ -379,7 +379,7 @@
address SQLargRecord
comment "Glue together the calling sequence";
-function sql_environment():bat[:str,:bat];
+function sql_environment{inline}():bat[:str,:bat];
b := bat.new(:str,:bat,2);
e := inspect.getEnvironment();
n := algebra.markT(e, 0:oid);
@@ -390,7 +390,7 @@
return sql_environment := b2;
end sql_environment;
-function clients():bat[:str,:bat];
+function clients{inline}():bat[:str,:bat];
b := bat.new(:str,:bat,5);
u:= clients.getUsers();
b1:= bat.insert(b,"user",u);
@@ -405,7 +405,7 @@
return clients := b5;
end clients;
-function bbp():bat[:str,:bat];
+function bbp{inline}():bat[:str,:bat];
b := bat.new(:str,:bat,12);
ns := bbp.getNames();
ri := algebra.markT(ns, 0:oid);
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins