Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv11808/src/backends/monet5
Modified Files:
sql.mx sql_gencode.mx sql_optimizer.mx sql_scenario.mx
Log Message:
fixes use of txtsim functions
added more optimized versions of cast of mtime types (from string)
added more optimized verion of str to string convert
added use (first steps) of rangejoin
approved tests which changed by this (rangejoin addition)
Index: sql_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_scenario.mx,v
retrieving revision 1.287
retrieving revision 1.288
diff -u -d -r1.287 -r1.288
--- sql_scenario.mx 9 Dec 2007 20:18:36 -0000 1.287
+++ sql_scenario.mx 21 Dec 2007 17:02:23 -0000 1.288
@@ -1140,9 +1140,9 @@
and prepare the stack for immediate execution
@c
str
-SQLexecutePrepared(Client cntxt, backend *be, cq *q )
+SQLexecutePrepared(Client c, backend *be, cq *q )
{
- mvc *c = be->mvc;
+ mvc *m = be->mvc;
int argc, parc;
ValPtr *argv, argvbuffer[MAXARG], v;
ValRecord *argrec, argrecbuffer[MAXARG];
@@ -1172,7 +1172,7 @@
argv[i]->vtype= getVarGDKType(mb,i);
}
- argc = c->argc;
+ argc = m->argc;
parc = q->paramlen;
if (argc != parc) {
@@ -1182,8 +1182,8 @@
GDKfree(argrec);
throw(SQL, "sql.prepare", "wrong number of arguments for
prepared statement: %d, expected %d", argc, parc);
} else {
- for (i = 0; i<c->argc; i++){
- atom *arg = c->args[i];
+ for (i = 0; i<m->argc; i++){
+ atom *arg = m->args[i];
sql_subtype *pt = q->params+i;
if (!atom_cast(arg, pt)) {
@@ -1198,7 +1198,10 @@
}
}
glb = (MalStkPtr)(q->stk);
- ret= callMAL(cntxt,mb, &glb, argv, (c->mode == m_debug?'n':0));
+ ret= callMAL(c, mb, &glb, argv, (m->mode == m_debug?'n':0));
+ if (ret && SQLdebug&16)
+ printFunction(c->fdout, mb,
+ LIST_MAL_INSTR | LIST_MAL_PROPS | LIST_MAPI);
/* cleanup the arguments */
for(i=pci->retc; i<pci->argc; i++) {
garbageElement(v= &glb->stk[pci->argv[i]]);
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.255
retrieving revision 1.256
diff -u -d -r1.255 -r1.256
--- sql_gencode.mx 13 Dec 2007 16:08:17 -0000 1.255
+++ sql_gencode.mx 21 Dec 2007 17:02:22 -0000 1.256
@@ -638,7 +638,7 @@
break;
case st_uselect:
- case st_select:{
+ case st_select: {
int l = _dumpstmt(sql, mb, s->op1.stval);
int r = _dumpstmt(sql, mb, s->op2.stval);
int k;
@@ -757,7 +757,7 @@
#ifdef HAVE_LIBPCRE
q = newStmt(mb, "pcre", "like");
#else
- q = newStmt(mb, "batcalc", "like");
+ q = newStmt(mb, "batstr", "like");
#endif
q = pushArgument(mb, q, l);
q = pushArgument(mb, q, r);
@@ -771,7 +771,7 @@
#ifdef HAVE_LIBPCRE
q = newStmt(mb, "pcre", "like");
#else
- q = newStmt(mb, "batcalc", "like");
+ q = newStmt(mb, "batstr", "like");
#endif
q = pushArgument(mb, q, l);
q = pushArgument(mb, q, r);
@@ -844,11 +844,15 @@
}
break;
case st_uselect2:
- case st_select2:{
+ case st_select2:
+ case st_join2:{
int l = _dumpstmt(sql, mb, s->op1.stval);
int r1 = _dumpstmt(sql, mb, s->op2.stval);
int r2 = _dumpstmt(sql, mb, s->op3.stval);
- char *cmd = st_uselect2 == s->type ? uselectRef :
selectRef;
+ char *cmd =
+ (s->type == st_select2) ? selectRef :
+ (s->type == st_uselect2) ? uselectRef :
+ joinRef;
@:SQLprelude@
Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -d -r1.166 -r1.167
--- sql_optimizer.mx 9 Dec 2007 16:22:32 -0000 1.166
+++ sql_optimizer.mx 21 Dec 2007 17:02:23 -0000 1.167
@@ -383,7 +383,7 @@
}
if (part <= 1) {
pushInstruction(mb,p);
- if (bpm) {
+ if (bpm && mode != RD_UPD) {
oid low = 0, high = 1;
low = bpm->parts[off].hlow;
Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.243
retrieving revision 1.244
diff -u -d -r1.243 -r1.244
--- sql.mx 13 Dec 2007 16:08:17 -0000 1.243
+++ sql.mx 21 Dec 2007 17:02:22 -0000 1.244
@@ -412,6 +412,9 @@
command [EMAIL PROTECTED]( v:str ) :@1
address [EMAIL PROTECTED]
comment "cast to @1";
+command [EMAIL PROTECTED]( v:bat[:oid,:str] ) :bat[:oid,:@1]
+address [EMAIL PROTECTED]
+comment "cast to @1";
command calc.str( v:@1 ) :str
address [EMAIL PROTECTED]
comment "cast @1 to str";
@@ -451,6 +454,10 @@
address SQLstr_cast
comment "cast to string and check for overflow";
+command batcalc.str( eclass:int, d1:int, s1:int, has_tz:int,
v:bat[:oid,:any_1], digits:int ) :bat[:oid,:str]
+address SQLbatstr_cast
+comment "cast to string and check for overflow";
+
command calc.substring(s:str,offset:int):str
address STRsubstringTail;
command calc.substring(s:str,offset:int,count:int):str
@@ -741,6 +748,7 @@
@:cast_export(date,date_tostr)@
@:cast_export(sqlblob,sqlblob_tostr)@
sql5_export str SQLstr_cast(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+sql5_export str SQLbatstr_cast(int *r, int *eclass, int *d1, int *s1, int
*has_tz, int *v, int *digits );
@= fround_export
sql5_export str @[EMAIL PROTECTED]( @1 *res, @1 *v, @2 *r );
@h
@@ -2178,31 +2186,16 @@
}
str
-/*SQLstr_cast(str *res, ptr v, int tpe, int *len) */
-SQLstr_cast(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+SQLstr_cast_(str *res, mvc *m, int eclass, int d, int s, int has_tz, ptr p,
int tpe, int len)
{
- str *res = (str *) getArgReference(stk, pci, 0);
- int eclass = *(int*) getArgReference(stk, pci, 1);
- int d = *(int*) getArgReference(stk, pci, 2);
- int s = *(int*) getArgReference(stk, pci, 3);
- int has_tz = *(int*) getArgReference(stk, pci, 4);
- ptr p = (ptr) getArgReference(stk, pci, 5);
- int tpe = getArgType(mb, pci, 5);
- int len = *(int *) getArgReference(stk, pci, 6);
- int sz = len + 1;
char *r = NULL;
- mvc *m = NULL;
- str msg = getContext(&m, NULL);
+ int sz = len + 1;
- if (msg)
- return msg;
if (tpe != TYPE_str) {
r = GDKmalloc(sz);
- if (ATOMextern(tpe))
- p = *(ptr*)p;
- sz = convert2str(m, eclass, d, s, has_tz, p, tpe, &r, len);
+ sz = convert2str(m, eclass, d, s, has_tz, p, tpe, &r, sz);
} else {
- str v = *(str*)p;
+ str v = (str)p;
sz = _strlen(v);
if (len == 0 || sz <= len)
r = GDKstrdup(v);
@@ -2213,14 +2206,65 @@
if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), p) != 0) {
throw(SQL, "str_cast", "value too long for type
(var)char(%d)", len);
} else {
- *res = GDKstrdup(str_nil);
- return MAL_SUCCEED;
+ r = GDKstrdup(str_nil);
}
}
*res = r;
return MAL_SUCCEED;
}
+str
+SQLstr_cast(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ str *res = (str *) getArgReference(stk, pci, 0);
+ int eclass = *(int*) getArgReference(stk, pci, 1);
+ int d = *(int*) getArgReference(stk, pci, 2);
+ int s = *(int*) getArgReference(stk, pci, 3);
+ int has_tz = *(int*) getArgReference(stk, pci, 4);
+ ptr p = (ptr) getArgReference(stk, pci, 5);
+ int tpe = getArgType(mb, pci, 5);
+ int len = *(int *) getArgReference(stk, pci, 6);
+ mvc *m = NULL;
+ str msg = getContext(&m, NULL);
+
+ if (msg)
+ return msg;
+ if (ATOMextern(tpe))
+ p = *(ptr*)p;
+ return SQLstr_cast_(res, m, eclass, d, s, has_tz, p, tpe, len );
+}
+
+str
+SQLbatstr_cast(int *res, int *eclass, int *d1, int *s1, int *has_tz, int *bid,
int *digits )
+{
+ BAT *b, *dst;
+ BATiter bi;
+ BUN p,q;
+ mvc *m = NULL;
+ str msg = getContext(&m, NULL);
+ char *r = NULL;
+
+ if (msg)
+ return msg;
+ if( (b = BATdescriptor(*bid)) == NULL ){
+ throw(SQL, "[EMAIL PROTECTED]", "Cannot access descriptor");
+ }
+ bi = bat_iterator(b);
+ dst = BATnew(b->htype, TYPE_str, BATcount(b));
+ BATseqbase(dst, b->hseqbase);
+ BATloop(b,p,q) {
+ ptr v = (ptr)BUNtail(bi,p);
+ msg = SQLstr_cast_( &r, m, *eclass, *d1, *s1, *has_tz, v,
b->ttype, *digits);
+ if (msg)
+ break;
+ BUNins(dst, BUNhead(bi,p), r, FALSE);
+ GDKfree(r);
+ }
+ BBPkeepref( *res = dst->batCacheid);
+ BBPunfix(b->batCacheid);
+ return msg;
+}
+
@= simpleupcast
str
@[EMAIL PROTECTED]( @1 *res, @2 *v )
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins