Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv12431/src/backends/monet5
Modified Files:
sql.mx sql_gencode.mx
Log Message:
added support for 'create cluster name on tname ( column list )'
which caused lots of changes all over the place.
also fixed (moved code out of sql -> mkey)
moved finally copy into over to a function and into relational alg.
U sql_gencode.mx
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.329
retrieving revision 1.330
diff -u -d -r1.329 -r1.330
--- sql_gencode.mx 20 Jul 2009 13:56:30 -0000 1.329
+++ sql_gencode.mx 25 Jul 2009 22:08:37 -0000 1.330
@@ -606,9 +606,9 @@
len = getDestVar(q);
if ((s->flag-1) > 0) {
- q = newStmt1(mb, algebraRef,
"sortTail");
+ q = newStmt2(mb, algebraRef,
sortTailRef);
} else {
- q = newStmt1(mb, algebraRef,
"sortReverseTail");
+ q = newStmt2(mb, algebraRef,
sortReverseTailRef);
}
q = pushArgument(mb, q, l);
l = getDestVar(q);
@@ -652,9 +652,9 @@
int l = _dumpstmt(sql, mb, s->op1.stval);
if( s->flag > 0){
- q = newStmt1(mb, algebraRef, "sortTail");
+ q = newStmt2(mb, algebraRef, sortTailRef);
} else {
- q = newStmt1(mb, algebraRef, "sortReverseTail");
+ q = newStmt2(mb, algebraRef,
sortReverseTailRef);
}
q = pushArgument(mb, q, l);
s->nr = getDestVar(q);
@@ -664,9 +664,9 @@
int r = _dumpstmt(sql, mb, s->op2.stval);
if (s->flag) {
- q = newStmt1(mb, groupRef, "refine");
+ q = newStmt2(mb, groupRef, refineRef);
} else {
- q = newStmt1(mb, groupRef, "refine_reverse");
+ q = newStmt2(mb, groupRef, refine_reverseRef);
}
q = pushArgument(mb, q, l);
q = pushArgument(mb, q, r);
@@ -716,11 +716,11 @@
showException(SQL,"sql","Unknown
operator");
}
- q = newStmt1(mb, batRef, "mirror" );
+ q = newStmt2(mb, batRef, mirrorRef );
q = pushArgument(mb, q, l);
hml = getDestVar(q);
- q = newStmt1(mb, batRef, "mirror" );
+ q = newStmt2(mb, batRef, mirrorRef );
q = pushArgument(mb, q, r);
tmr = getDestVar(q);
@@ -1065,7 +1065,7 @@
e = findVariable(mb, ext);
assert(e >= 0);
- q = newStmt1(mb, batRef, "mirror");
+ q = newStmt2(mb, batRef, mirrorRef);
q = pushArgument(mb, q, e);
s->nr = getDestVar(q);
} break;
@@ -1114,7 +1114,7 @@
q = pushArgument(mb, q, g);
q = pushArgument(mb, q, l);
- q = newStmt1(mb, batRef, "mirror");
+ q = newStmt2(mb, batRef, mirrorRef);
q = pushArgument(mb, q, e);
e = getDestVar(q);
@@ -1487,91 +1487,6 @@
q = pushArgument(mb, q, o2);
s->nr = getDestVar(q);
} break;
- case st_import:{
- char *sname = s->op1.stval->op1.tval->s->base.name;
- char *tname = s->op1.stval->op1.tval->base.name;
- node *n = s->op2.lval->h;
- char *sep = n->data;
- char *rsep = n->next->data;
- char *ssep = n->next->next->data;
- char *ns = n->next->next->next->data;
- lng nr_rec = *(lng*)(n->next->next->next->next->data);
- lng offset =
*(lng*)(n->next->next->next->next->next->data);
-
- if (sep == NULL) {
- /* COPY INTO from binary files */
- int *fn;
- int i;
- node *f;
-
- fn = (int *) alloca(sizeof(int) *
s->op4.lval->cnt);
- for (f = s->op4.lval->h, i = 0; f; f = f->next,
i++)
- fn[i] = _dumpstmt(sql, mb, (stmt *)
f->data);
- q = newStmt1(mb, sqlRef, "importTable");
- q = pushStr(mb, q, sname);
- q = pushStr(mb, q, tname);
- for (i = 0; i < s->op4.lval->cnt; i++)
- q = pushArgument(mb, q, fn[i]);
- s->nr = getDestVar(q);
- } else if (s->op4.stval) {
- int file = _dumpstmt(sql, mb, s->op4.stval);
- int codeset;
- int bs;
-
- q = newStmt(mb, "str", "codeset");
- codeset = getDestVar(q);
-
- q = newStmt(mb, "str", "iconv");
- q = pushArgument(mb, q, file);
- q = pushStr(mb, q, "UTF-8");
- q = pushArgument(mb, q, codeset);
- file = getDestVar(q);
-
- q = newStmt(mb, "streams", "openRead");
- q = pushArgument(mb, q, file);
- file = getDestVar(q);
-
- q = newStmt(mb, "bstream", "create");
- q = pushArgument(mb, q, file);
- q = pushInt(mb, q, 1024*1024);
- bs = getDestVar(q);
-
- q = newStmt1(mb, sqlRef, "importTable");
- q = pushArgument(mb, q, bs);
- q = pushStr(mb, q, sname);
- q = pushStr(mb, q, tname);
- q = pushStr(mb, q, sep);
- q = pushStr(mb, q, rsep);
- q = pushStr(mb, q, ssep);
- q = pushStr(mb, q, ns);
- q = pushLng(mb, q, nr_rec);
- q = pushLng(mb, q, offset);
- s->nr = getDestVar(q);
-
- q = newStmt(mb, "bstream", "destroy");
- q = pushArgument(mb, q, bs);
-
- q = newStmt(mb, "streams", "close");
- q = pushArgument(mb, q, file);
- } else {
- int io_stdin;
- q = newStmt(mb, "io", "stdin");
- io_stdin = getDestVar(q);
-
- q = newStmt1(mb, sqlRef, "importTable");
- q = pushArgument(mb, q, io_stdin);
- q = pushStr(mb, q, sname);
- q = pushStr(mb, q, tname);
- q = pushStr(mb, q, sep);
- q = pushStr(mb, q, rsep);
- q = pushStr(mb, q, ssep);
- q = pushStr(mb, q, ns);
- q = pushLng(mb, q, nr_rec);
- q = pushLng(mb, q, offset);
- s->nr = getDestVar(q);
- }
- }
- break;
case st_ordered:{
int l = _dumpstmt(sql, mb, s->op1.stval);
U sql.mx
Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.346
retrieving revision 1.347
diff -u -d -r1.346 -r1.347
--- sql.mx 20 Jul 2009 13:56:26 -0000 1.346
+++ sql.mx 25 Jul 2009 22:08:37 -0000 1.347
@@ -254,10 +254,48 @@
comment "Import a table from bstream s with the
given tuple and seperators (sep/rsep)";
+function copy_from(
+ sname:str,
+ tname:str,
+ tsep:str,
+ rsep:str,
+ ssep:str,
+ ns:str,
+ fname:str,
+ nr:lng,
+ offset:lng
+):bat[:str,:bat];
+ cs := str.codeset();
+ f := str.iconv(fname, "UTF-8", cs);
+ s := streams.openRead(f);
+ bs := bstream.create(s, 1048576);
+
+ res := sql.importTable(bs, sname, tname, tsep, rsep, ssep, ns, nr,
offset);
+ bstream.destroy(bs);
+ streams.close(s);
+ return res;
+end copy_from;
+
+function copyfrom(
+ sname:str,
+ tname:str,
+ tsep:str,
+ rsep:str,
+ ssep:str,
+ ns:str,
+ nr:lng,
+ offset:lng
+):bat[:str,:bat];
+ in := io.stdin();
+ res := sql.importTable(in, sname, tname, tsep, rsep, ssep, ns, nr,
offset);
+ return res;
+end copyfrom;
+
pattern importTable{unsafe}( sname:str, tname:str, fname:str... )
:bat[:str,:bat]
address mvc_bin_import_table_wrap
comment "Import a table from the files (fname)";
+
command zero_or_one( col:bat[:any_2,:any_1]) :any_1
address zero_or_one
comment "if col contains exactly one value return this. Incase of more raise
an exception else return nil";
@@ -413,15 +451,11 @@
The routine below are added to the calc module to
ease code generation.
@mal
+pattern calc.hash( v:any ) :wrd address MKEYhash;
+command batcalc.hash( b:bat[:oid,:any_1] ) :bat[:oid,:wrd] address MKEYbathash;
pattern calc.rotate_xor_hash(h:wrd, nbits:int, v:any_1) :wrd address
MKEYrotate_xor_hash;
command batcalc.rotate_xor_hash(h:bat[:oid,:wrd], nbits:int,
b:bat[:oid,:any_1]) :bat[:oid,:int] address MKEYbulk_rotate_xor_hash;
-pattern calc.hash( v:any ) :wrd address hash_wrap;
-
-command batcalc.hash( b:bat[:oid,:any_1] ) :bat[:oid,:wrd]
-address bathash_wrap
-comment "calculate a hash value";
-
@- SQL functions
The SQL functions are all recognized by their module name.
For some we need to provide a new implementation, others
@@ -502,6 +536,7 @@
address s...@1_2_str
comment "cast @1 to str";
@mal
+@:mal_castfromstr(wrd)@
@:mal_castfromstr(flt)@
@:mal_castfromstr(dbl)@
@:mal_castfromstr(timestamp)@
@@ -702,7 +737,7 @@
m := aggr.max(e);
c0 := calc.isnil(m);
c0 := calc.not(c0);
- c1 := calc.>(m,1);
+ c1 := calc.>(m,1:wrd);
c1 := calc.and(c0,c1);
ms := calc.str(m);
msg := str.+("zero_or_one: cardinality violation (", ms);
@@ -856,6 +891,7 @@
#include <streams.h>
#include <mtime.h>
#include <blob.h>
+#include <mkey.h>
#include <str.h>
#include "sql_privileges.h"
#include "sql_semantic.h"
@@ -935,8 +971,6 @@
sql5_export str mvc_export_value_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
sql5_export str mvc_import_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
sql5_export str mvc_bin_import_table_wrap(Client cntxt, MalBlkPtr mb,
MalStkPtr stk, InstrPtr pci);
-sql5_export str bathash_wrap(bat *res, bat *bid );
-sql5_export str hash_wrap(Client cntxt, MalBlkPtr m, MalStkPtr s, InstrPtr p);
sql5_export str setVariable(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str getVariable(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str sql_variables(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
@@ -989,6 +1023,7 @@
@:cast_export(sht,shtToStr,sht)@
@:cast_export(int,intToStr,int)@
@:cast_export(lng,lngToStr,lng)@
+@:cast_export(wrd,wrdToStr,wrd)@
@:cast_export(flt,fltToStr,flt)@
@:cast_export(dbl,dblToStr,dbl)@
@:cast_export(timestamp,timestamp_tostr,timestamp)@
@@ -1161,12 +1196,36 @@
consumption, e.g. display
@c
stmt *
+sql_symbols2stmt(mvc *c, symbol *s)
+{
+ dnode *d;
+ list *l = create_stmt_list();
+
+ for (d = s->data.lval->h; d; d = d->next) {
+ symbol *sym = d->data.sym;
+ stmt *st = sql_symbol2stmt(c, sym);
+
+ if (!st) {
+ list_destroy(l);
+ return NULL;
+ }
+ list_append(l, st);
+ }
+ return stmt_list(l);
+}
+
+stmt *
sql_symbol2stmt(mvc *c, symbol *sym)
{
stmt *s = NULL;
- int status = c->session->status;
- sql_rel *r = rel_semantic(c, sym);
+ int status;
+ sql_rel *r;
+ if (sym->token == SQL_MULSTMT)
+ return sql_symbols2stmt(c, sym);
+
+ status = c->session->status;
+ r = rel_semantic(c, sym);
if (!r) {
if (c->errstr[0]) {
return NULL;
@@ -2575,115 +2634,6 @@
return MAL_SUCCEED;
}
-static str
-voidbathash(bat *res, BAT *b )
-{
- BAT *dst;
- BUN (*hash)(ptr v);
- wrd *r, *f;
- BATiter bi, dsti;
-
- dst = BATnew(TYPE_void, TYPE_wrd, BATcount(b));
- if (!dst) {
- BBPunfix(b->batCacheid);
- throw(SQL, "bathash", "can not create bat");
- }
- BATseqbase(dst, b->hseqbase);
-
- dsti = bat_iterator(dst);
- bi = bat_iterator(b);
- r = (wrd*)BUNtail(dsti, BUNfirst(dst));
- f = r;
- hash = BATatoms[b->ttype].atomHash;
- if (ATOMvarsized(b->ttype)) { /* ugh */
- BUN p,q;
-
- BATloop(b,p,q) {
- ptr v = BUNtail(bi,p);
- *r++ = hash(v);
- }
- } else {
- char *v = BUNtail(bi,BUNfirst(b)), *e = BUNtail(bi,BUNlast(b));
- int sz = Tsize(b);
-
- for(; v < e; v+=sz)
- *r++ = hash(v);
- }
- BATsetcount(dst, (BUN) (r-f));
- BATkey(BATmirror(dst), 0);
- dst->tsorted = 0;
-
- BBPkeepref( *res = dst->batCacheid);
- BBPunfix(b->batCacheid);
- return MAL_SUCCEED;
-}
-
-str
-bathash_wrap(bat *res, bat *bid )
-{
- BAT *b, *dst;
- BUN (*hash)(ptr v);
- BATiter bi;
-
- if( (b = BATdescriptor(*bid)) == NULL ){
- throw(SQL, "bathash", "Cannot access descriptor");
- }
-
- if (b->htype == TYPE_void)
- return voidbathash(res, b);
-
- dst= BATnew(TYPE_oid, TYPE_wrd, BATcount(b));
- if (!dst) {
- BBPunfix(b->batCacheid);
- throw(SQL, "bathash", "can not create bat");
- }
-
- hash = BATatoms[b->ttype].atomHash;
- bi = bat_iterator(b);
- if (ATOMvarsized(b->ttype)) { /* ugh */
- BUN p,q;
-
- BATloop(b,p,q){
- ptr v = BUNtail(bi,p);
- wrd h = hash(v);
- BUNins(dst, BUNhead(bi,p), &h, FALSE);
- }
- } else {
- BUN p,q;
-
- BATloop(b,p,q){
- ptr v = BUNtail(bi,p);
- wrd h = hash(v);
- BUNins(dst, BUNhead(bi,p), &h, FALSE);
- }
- }
-
- BBPkeepref( *res = dst->batCacheid);
- BBPunfix(b->batCacheid);
- return MAL_SUCCEED;
-}
-
-
-str
-hash_wrap(Client cntxt, MalBlkPtr m, MalStkPtr s, InstrPtr p)
-{
- ptr v;
- wrd *res, tpe = getArgType(m,p,1);
-
- (void) cntxt;
- v = getArgReference(s,p,1);
-
- if (tpe == TYPE_bat)
- return bathash_wrap((int*)getArgReference(s,p,0), (int*)v);
-
- res = (wrd *) getArgReference(s,p,0);
- if (ATOMextern(tpe)) /* ugh */
- *res = ATOMhash(tpe, *(char**)v);
- else
- *res = ATOMhash(tpe, v);
- return NULL;
-}
-
lng scales[20] = {
LL_CONSTANT(0),
LL_CONSTANT(10),
@@ -2927,6 +2877,12 @@
@:fround(flt)@
@:fround(dbl)@
+#if SIZEOF_WRD == SIZEOF_INT
+#define wrdToStr(sptr, lptr, p) intToStr(sptr, lptr, (int*)p)
+#else
+#define wrdToStr(sptr, lptr, p) lngToStr(sptr, lptr, (lng*)p)
+#endif
+
@= cast
str
str...@1( @3 *res, str *val )
@@ -2997,6 +2953,7 @@
@:cast(sht,shtToStr,sht, *res = *(sht*)p)@
@:cast(int,intToStr,int, *res = *(int*)p)@
@:cast(lng,lngToStr,lng, *res = *(lng*)p)@
+@:cast(wrd,wrdToStr,wrd, *res = *(wrd*)p)@
@:cast(flt,fltToStr,flt, *res = *(flt*)p)@
@:cast(dbl,dblToStr,dbl, *res = *(dbl*)p)@
@:cast(timestamp,timestamp_tostr,timestamp, *res = *(timestamp*)p)@
@@ -4128,14 +4085,14 @@
c = o->data;
if (first) {
bat psum;
- unsigned int bits = 10;
+ unsigned int bits = 10, off = 0;
first = 0;
b = store_funcs.bind_col(tr, c, 0);
- msg = voidbathash(&hid, b);
+ msg = MKEYbathash(&hid, &b->batCacheid);
BBPreleaseref(b->batCacheid);
if (msg)
return msg;
- msg = CLS_create(&psum, &mid, &hid, &bits);
+ msg = CLS_create_wrd(&psum, &mid, &hid, &bits, &off);
BBPdecref(hid, TRUE);
BBPdecref(psum, TRUE);
if (msg)
------------------------------------------------------------------------------
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins