Changeset: 6adf30a20074 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6adf30a20074
Modified Files:
monetdb5/mal/mal_profiler.mx
monetdb5/modules/kernel/batcast.mx
monetdb5/modules/mal/tablet.mx
sql/backends/monet5/sql.mx
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_result.mx
sql/backends/monet5/sql_user.c
sql/server/rel_bin.c
sql/server/sql_statement.c
sql/server/sql_statement.h
sql/sql/16_tracelog.sql
sql/test/BugTracker-2010/Tests/mat.slice_limit1.Bug-2645.sql
sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
sql/test/leaks/Tests/check0.stable.out
sql/test/leaks/Tests/check1.stable.out
sql/test/leaks/Tests/check2.stable.out
sql/test/leaks/Tests/check3.stable.out
sql/test/leaks/Tests/check4.stable.out
sql/test/leaks/Tests/check5.stable.out
sql/test/leaks/Tests/drop3.stable.out
sql/test/leaks/Tests/temp1.stable.out
sql/test/leaks/Tests/temp2.stable.out
sql/test/leaks/Tests/temp3.stable.out
sql/test/mapi/Tests/php_monetdb.stable.out
Branch: default
Log Message:
table returning functions now return multiple bats instead of a bat
of bats.
diffs (truncated from 1649 to 300 lines):
diff --git a/monetdb5/mal/mal_profiler.mx b/monetdb5/mal/mal_profiler.mx
--- a/monetdb5/mal/mal_profiler.mx
+++ b/monetdb5/mal/mal_profiler.mx
@@ -271,7 +271,7 @@ mal_export int malProfileMode;
mal_export void clearTrace(void);
mal_export BAT *getTrace(str ev);
mal_export int getTraceType(str nme);
-mal_export BAT * TRACEtable(void);
+mal_export void TRACEtable(BAT **r);
mal_export lng getDiskSpace(void);
mal_export lng getDiskReads(void);
@@ -1007,31 +1007,25 @@ static BAT *TRACE_id_writes = 0;
static BAT *TRACE_id_thread = 0;
static BAT *TRACE_id_user = 0;
-BAT *
-TRACEtable(void)
+void
+TRACEtable(BAT **r)
{
- BAT *t;
-
if (initTrace())
- return NULL;
- t = BATnew(TYPE_str, TYPE_bat, 9);
- if (t == NULL)
- return NULL;
+ return ;
mal_set_lock(mal_profileLock, "profileLock");
- BUNins(t, "event", &TRACE_id_event->batCacheid, FALSE);
- BUNins(t, "clk", &TRACE_id_time->batCacheid, FALSE);
- BUNins(t, "pc", &TRACE_id_pc->batCacheid, FALSE);
- BUNins(t, "thread", &TRACE_id_thread->batCacheid, FALSE);
- BUNins(t, "user", &TRACE_id_user->batCacheid, FALSE);
- BUNins(t, "ticks", &TRACE_id_ticks->batCacheid, FALSE);
- BUNins(t, "reads", &TRACE_id_reads->batCacheid, FALSE);
- BUNins(t, "writes", &TRACE_id_writes->batCacheid, FALSE);
- BUNins(t, "rbytes", &TRACE_id_rbytes->batCacheid, FALSE);
- BUNins(t, "wbytes", &TRACE_id_wbytes->batCacheid, FALSE);
- BUNins(t, "type", &TRACE_id_type->batCacheid, FALSE);
- BUNins(t, "stmt", &TRACE_id_stmt->batCacheid, FALSE);
+ r[0] = TRACE_id_event;
+ r[1] = TRACE_id_time;
+ r[2] = TRACE_id_pc;
+ r[3] = TRACE_id_thread;
+ r[4] = TRACE_id_user;
+ r[5] = TRACE_id_ticks;
+ r[6] = TRACE_id_reads;
+ r[7] = TRACE_id_writes;
+ r[8] = TRACE_id_rbytes;
+ r[9] = TRACE_id_wbytes;
+ r[10] = TRACE_id_type;
+ r[11] = TRACE_id_stmt;
mal_unset_lock(mal_profileLock, "profileLock");
- return t;
}
static BAT *
diff --git a/monetdb5/modules/kernel/batcast.mx
b/monetdb5/modules/kernel/batcast.mx
--- a/monetdb5/modules/kernel/batcast.mx
+++ b/monetdb5/modules/kernel/batcast.mx
@@ -128,6 +128,9 @@ All Rights Reserved.
@:coercion(str,bit)@
@:coercion(str,int)@
+
+ @:coercion(int,str)@
+ @:coercion(lng,str)@
# @-
@include kprelude.mx
@h
diff --git a/monetdb5/modules/mal/tablet.mx b/monetdb5/modules/mal/tablet.mx
--- a/monetdb5/modules/mal/tablet.mx
+++ b/monetdb5/modules/mal/tablet.mx
@@ -480,8 +480,9 @@ tablet_export int TABLETcreate_bats(Tabl
tablet_export BUN TABLETassign_BATs(Tablet * as, BAT *bats);
tablet_export BUN TABLETload_file(Tablet * as, bstream *b, stream *out);
tablet_export BUN SQLload_file(Client cntxt, Tablet * as, bstream *b, stream
*out, char *csep, char *rsep, char quote, lng skip, lng maxrow);
+tablet_export BAT **TABLETcollect(Tablet * as);
tablet_export BAT *TABLETcollect_bats(Tablet * as);
-tablet_export BAT *TABLETcollect_parts(Tablet * as, BUN offset);
+tablet_export BAT **TABLETcollect_parts(Tablet * as, BUN offset);
tablet_export void TABLETdestroy_format(Tablet * as);
tablet_export int TABLEToutput_file(Tablet * as, BAT *order, stream *s);
@@ -1344,10 +1345,43 @@ TABLETcollect_bats(Tablet * as)
return bats;
}
-BAT *
+BAT **
+TABLETcollect(Tablet * as)
+{
+ BAT **bats = GDKmalloc(sizeof(BAT*) * as->nr_attrs);
+ Column *fmt = as->format;
+ BUN i;
+ BUN cnt = BATcount(fmt[0].c[0]);
+
+ if (bats == NULL)
+ return NULL;
+ for (i = 0; i < as->nr_attrs; i++) {
+ bats[i] = fmt[i].c[0];
+ BBPincref(bats[i]->batCacheid, FALSE);
+ BATsetaccess(fmt[i].c[0], BAT_READ);
+ BATaccessBegin(fmt[i].c[0], USE_ALL, MMAP_WILLNEED);
+ BATpropcheck(fmt[i].c[0], BATPROPS_ALL);
+ /* drop the hashes, we don't need them now and they consume
space */
+ HASHremove(fmt[i].c[0]);
+
+ BATpropcheck(BATmirror(fmt[i].c[0]), BATPROPS_ALL);
+ /* drop the hashes, we don't need them now and they consume
space */
+ HASHremove(BATmirror(fmt[i].c[0]));
+ BATaccessEnd(fmt[i].c[0], USE_ALL, MMAP_WILLNEED);
+
+ if (cnt != BATcount(fmt[i].c[0])) {
+ if ( as->error == 0) /* a new error */
+ GDKerror("Error: column " BUNFMT " count "
BUNFMT " differs from " BUNFMT "\n",i,BATcount(fmt[i].c[0]),cnt);
+ return NULL;
+ }
+ }
+ return bats;
+}
+
+BAT **
TABLETcollect_parts(Tablet * as, BUN offset)
{
- BAT *bats = BATnew(TYPE_str, TYPE_bat, as->nr_attrs);
+ BAT **bats = GDKmalloc(sizeof(BAT*) * as->nr_attrs);
Column *fmt = as->format;
BUN i;
BUN cnt = BATcount(fmt[0].c[0]);
@@ -1361,7 +1395,7 @@ TABLETcollect_parts(Tablet * as, BUN off
BATsetaccess(b, BAT_READ);
bv = BATslice(b, offset, BATcount(b));
- BUNins(bats, (ptr) fmt[i].name, (ptr) &bv->batCacheid, FALSE);
+ bats[i] = bv;
/* we "mis"use BATpropcheck to set rather than verify
properties on
* the newly loaded slice; hence, we locally disable property
errors */
GDKdebug &= ~PROPMASK;
@@ -1391,10 +1425,8 @@ TABLETcollect_parts(Tablet * as, BUN off
if (cnt != BATcount(b)) {
if ( as->error == 0) /* a new error */
GDKerror("Error: column " BUNFMT " count "
BUNFMT " differs from " BUNFMT "\n",i,BATcount(b),cnt);
- BBPunfix(bats->batCacheid);
return NULL;
}
- BBPunfix(bv->batCacheid);
}
return bats;
}
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -239,10 +239,6 @@ pattern delete{unsafe}(mvc:int, sname:st
address mvc_delete_wrap
comment "delete from table";
-command columnBind(b:bat[:str,:bat], nme:str) :bat[:oid,:any_1]
-address mvc_bind_single_wrap
-comment "Bind the column bat into the focus ";
-
# @-
# The Monet 5 code generator uses several SQL specific wrapper functions.
pattern resultSet{unsafe}( nr_cols:int, sep:str, rsep:str, ssep:str, ns:str,
order:any_1 ) :int
@@ -312,64 +308,28 @@ pattern exportValue{unsafe}(qtype:int, t
address mvc_export_value_wrap
comment "export a single value onto the stream s";
-pattern importTable{unsafe}( s:bstream, sname:str, tname:str,
- sep:str, rsep:str, ssep:str, ns:str, nr:lng, offset:lng, locked:int)
:bat[:str,:bat]
+pattern copy_from{unsafe}( sname:str, tname:str,
+ sep:str, rsep:str, ssep:str, ns:str, fname:str, nr:lng, offset:lng,
locked:int)(:bat[:oid,:any]...)
address mvc_import_table_wrap
comment "Import a table from bstream s with the
given tuple and seperators (sep/rsep)";
+pattern copyfrom{unsafe}( sname:str, tname:str,
+ sep:str, rsep:str, ssep:str, ns:str, nr:lng, offset:lng,
locked:int)(:bat[:oid,:any]...)
+address mvc_import_table_stdin
+comment "Import a table from bstream s with the
+ given tuple and seperators (sep/rsep)";
+
function single(x:any_2):bat[:oid,:any_2];
b := bat.new(0:oid, x);
c := bat.append(b, x);
return c;
end single;
-function copy_from(
- sname:str,
- tname:str,
- tsep:str,
- rsep:str,
- ssep:str,
- ns:str,
- fname:str,
- nr:lng,
- offset:lng,
- locked:int
-):bat[:str,:bat];
- cs := str.codeset();
- f := str.iconv(fname, "UTF-8", cs);
- s := streams.openRead(f);
- #bs := bstream.create(s, 1048576);
- #bs := bstream.create(s, 8388608);
- bs := bstream.create(s, 33554432);
- #bs := bstream.create(s, 67108864);
-
- res := sql.importTable(bs, sname, tname, tsep, rsep, ssep, ns, nr,
offset, locked);
- bstream.destroy(bs);
- return res;
-end copy_from;
-
-function copyfrom(
- sname:str,
- tname:str,
- tsep:str,
- rsep:str,
- ssep:str,
- ns:str,
- nr:lng,
- offset:lng,
- locked:int
-):bat[:str,:bat];
- in := io.stdin();
- res := sql.importTable(in, sname, tname, tsep, rsep, ssep, ns, nr,
offset, locked);
- return res;
-end copyfrom;
-
-pattern importTable{unsafe}( sname:str, tname:str, fname:str... )
:bat[:str,:bat]
+pattern importTable{unsafe}( sname:str, tname:str, fname:str...
)(:bat[:oid,:any]...)
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";
@@ -430,78 +390,61 @@ pattern argRecord(a:any...):str
address SQLargRecord
comment "Glue together the calling sequence";
-function sql_environment{inline}():bat[:str,:bat];
- b := bat.new(:str,:bat,2);
+function sql_environment{inline}()(name:bat[:oid,:str],value:bat[:oid,:str]);
e := inspect.getEnvironment();
n := algebra.markT(e, 0:oid);
r := bat.reverse(n);
v := algebra.markH(e, 0:oid);
- b1:= bat.insert(b, "name", r);
- b2:= bat.insert(b1, "value", v);
- return sql_environment := b2;
+ return (r,v);
end sql_environment;
-function clients{inline}():bat[:str,:bat];
- b := bat.new(:str,:bat,5);
- u:= clients.getUsers();
- b1:= bat.insert(b,"user",u);
- l:= clients.getLogins();
- b2:= bat.insert(b1,"login",l);
- c:= clients.getLastCommand();
- b3:= bat.insert(b2,"lastcommand",c);
- a:= clients.getActions();
- b4:= bat.insert(b3,"actions",a);
- t:= clients.getTime();
- b5:= bat.insert(b4,"seconds",t);
- return clients := b5;
+function clients{inline}()( user:bat[:oid,:str], login:bat[:oid,:str],
lastcommand:bat[:oid,:str], actions:bat[:oid,:int], seconds:bat[:oid,:lng]);
+ U:= clients.getUsers();
+ u:= algebra.markH(U);
+ L:= clients.getLogins();
+ l:= algebra.markH(L);
+ C:= clients.getLastCommand();
+ c:= algebra.markH(C);
+ A:= clients.getActions();
+ a:= algebra.markH(A);
+ T:= clients.getTime();
+ t:= algebra.markH(T);
+ return (u,l,c,a,t);
end clients;
-function bbp{inline}():bat[:str,:bat];
- b := bat.new(:str,:bat,12);
+function bbp{inline}()( id:bat[:oid,:int], name:bat[:oid,:str],
htype:bat[:oid,:str], ttype:bat[:oid,:str], count:bat[:oid,:lng],
refcnt:bat[:oid,:int], lrefcnt:bat[:oid,:int], location:bat[:oid,:str],
heat:bat[:oid,:int], dirty:bat[:oid,:str], status:bat[:oid,:str],
kind:bat[:oid,:str]);
ns := bbp.getNames();
ri := algebra.markT(ns, 0:oid);
i := bat.reverse(ri);
n := algebra.markH(ns, 0:oid);
- b1:= bat.insert(b, "id", i);
- b2:= bat.insert(b1, "name", n);
iht := bbp.getHeadType();
ht := algebra.markH(iht, 0:oid);
- b3:= bat.insert(b2, "htype", ht);
itt := bbp.getTailType();
tt := algebra.markH(itt, 0:oid);
- b4:= bat.insert(b3, "ttype", tt);
icnt := bbp.getCount();
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list