Changeset: 79646e95efd0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=79646e95efd0
Modified Files:
MonetDB/src/gdk/gdk.mx
MonetDB/src/gdk/gdk_batop.mx
sql/src/backends/monet5/sql_scenario.mx
sql/src/include/sql_catalog.h
sql/src/server/sql_mvc.mx
sql/src/storage/bat/Makefile.ag
sql/src/storage/bat/bat_storage.mx
sql/src/storage/sql_storage.h
sql/src/storage/store.mx
Branch: default
Log Message:
start collection min/max values with bats
diffs (truncated from 308 to 300 lines):
diff -r a773c7419829 -r 79646e95efd0 MonetDB/src/gdk/gdk.mx
--- a/MonetDB/src/gdk/gdk.mx Fri May 21 20:20:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk.mx Fri May 21 20:21:01 2010 +0200
@@ -3361,8 +3361,12 @@
#define GDK_AGGR_SIZE 1
#define GDK_AGGR_CARD 2
+#define GDK_MIN_VALUE 3
+#define GDK_MAX_VALUE 4
gdk_export void PROPdestroy(PROPrec *p);
+gdk_export PROPrec * BATgetprop(BAT *b, int idx);
+gdk_export void BATsetprop(BAT *b, int idx, int type, void *v);
gdk_export bit BATgetprop_bit(BAT *b, int idx);
gdk_export int BATgetprop_int(BAT *b, int idx);
gdk_export wrd BATgetprop_wrd(BAT *b, int idx);
diff -r a773c7419829 -r 79646e95efd0 MonetDB/src/gdk/gdk_batop.mx
--- a/MonetDB/src/gdk/gdk_batop.mx Fri May 21 20:20:17 2010 +0200
+++ b/MonetDB/src/gdk/gdk_batop.mx Fri May 21 20:21:01 2010 +0200
@@ -2849,7 +2849,7 @@
}
}
-static PROPrec *
+PROPrec *
BATgetprop(BAT *b, int idx)
{
PROPrec *p = b->T->props;
@@ -2894,7 +2894,7 @@
return (p) ? p->v.val.pval : str_nil;
}
-static void
+void
BATsetprop(BAT *b, int idx, int type, void *v)
{
ValRecord vr;
diff -r a773c7419829 -r 79646e95efd0 sql/src/backends/monet5/sql_scenario.mx
--- a/sql/src/backends/monet5/sql_scenario.mx Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/backends/monet5/sql_scenario.mx Fri May 21 20:21:01 2010 +0200
@@ -233,7 +233,7 @@
return MAL_SUCCEED;
}
-MT_Id sqllogthread;
+MT_Id sqllogthread, minmaxthread;
static str
SQLinit(void)
@@ -280,6 +280,10 @@
mal_unset_lock(sql_contextLock,"SQL init");
throw(SQL, "SQLinit", "Starting log manager failed");
}
+ if (!GDKembedded && MT_create_thread(&minmaxthread, (void (*)(void *))
mvc_minmaxmanager, NULL) < 0) {
+ mal_unset_lock(sql_contextLock,"SQL init");
+ throw(SQL, "SQLinit", "Starting minmax manager failed");
+ }
return MAL_SUCCEED;
}
diff -r a773c7419829 -r 79646e95efd0 sql/src/include/sql_catalog.h
--- a/sql/src/include/sql_catalog.h Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/include/sql_catalog.h Fri May 21 20:21:01 2010 +0200
@@ -338,34 +338,6 @@
X_EQUI_HEIGHT
} sql_histype;
-/* a single-column histogram */
-typedef struct sql_histo {
- enum sql_histype type; /* type of histogram */
- int num_buckets; /* number of buckets (> 0) */
- void **min_value; /* smallest value in this column
- (min_valuei+1 = max_valuei, min_value0 =
column->min_value) */
- void **max_value; /* largest value in each bucket
- (max_valuei = min_valuei+1, max_valuei-1 <
max_valuei) */
- lng *num_values; /* number if distinct values in each bucket
- (0 < num_valuesi <= num_tuplesi) */
- lng *num_tuples; /* total number of tuples in each bucket
- (0 < num_valuesi <= num_tuplesi)*/
-} sql_histo;
-
-/* derived histogram of an (intermediate) column */
-typedef struct sql_histo_instance {
-struct sql_histo *histogram; /* the underlying base histogram; must NOT
be NULL */
- void *min_value; /* new smallest value in this column */
- void *max_value; /* new largest value in this column */
- dbl sel_values; /* selectivity factor to be applied to
num_values of all buckets
- of the underlying base histogram (0 <
sel_values <= 1) */
- dbl sel_tuples; /* selectivity factor to be applied to
num_tuples of all buckets
- of the underlying base histogram (0 <
sel_tuples) */
- /* Note: sel_values & sel_tuples represent the
relative changes
- since the base histogram, not since the
previous
- derived/intermediate histogram instance ! */
-} sql_histo_instance;
-
typedef struct sql_column {
sql_base base;
sql_subtype type;
diff -r a773c7419829 -r 79646e95efd0 sql/src/server/sql_mvc.mx
--- a/sql/src/server/sql_mvc.mx Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/server/sql_mvc.mx Fri May 21 20:21:01 2010 +0200
@@ -140,6 +140,7 @@
extern int mvc_init(char *dbname, int debug, store_type store, backend_stack
stk);
extern void mvc_exit(void);
extern void mvc_logmanager(void);
+extern void mvc_minmaxmanager(void);
extern mvc *mvc_create(int clientid, backend_stack stk, int debug, bstream
*rs, stream *ws);
extern void mvc_reset(mvc *m, bstream *rs, stream *ws, int debug, int
globalvars);
@@ -355,6 +356,12 @@
store_manager();
}
+void
+mvc_minmaxmanager()
+{
+ minmax_manager();
+}
+
int
mvc_status(mvc *m)
{
diff -r a773c7419829 -r 79646e95efd0 sql/src/storage/bat/Makefile.ag
--- a/sql/src/storage/bat/Makefile.ag Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/storage/bat/Makefile.ag Fri May 21 20:21:01 2010 +0200
@@ -17,7 +17,7 @@
## Process this file with automake to produce Makefile.in
-INCLUDES = .. ../../include ../../common $(MONETDB_INCS)
+INCLUDES = .. ../../include ../../common $(MONETDB_INCS) $(MONETDB5_INCS)
lib_batstore = {
NOINST
diff -r a773c7419829 -r 79646e95efd0 sql/src/storage/bat/bat_storage.mx
--- a/sql/src/storage/bat/bat_storage.mx Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/storage/bat/bat_storage.mx Fri May 21 20:21:01 2010 +0200
@@ -83,6 +83,7 @@
#include "bat_storage.h"
#include "bat_utils.h"
#include <sql_string.h>
+#include <algebra.h>
#define SNAPSHOT_MINSIZE ((BUN) 1024)
@@ -1211,7 +1212,7 @@
if (!c->base.wtime)
continue;
- gtr_update_delta(tr, c->data);
+ ok = gtr_update_delta(tr, c->data);
}
if (ok == LOG_OK && t->idxs.set) {
for (n = t->idxs.set->h; ok == LOG_OK && n; n = n->next) {
@@ -1221,33 +1222,92 @@
if (!ci->base.wtime)
continue;
- gtr_update_delta(tr, ci->data);
+ ok = gtr_update_delta(tr, ci->data);
}
}
return ok;
}
+typedef int (*gtr_update_table_fptr)( sql_trans *tr, sql_table *t);
+
static int
-gtr_update( sql_trans *tr )
+_gtr_update( sql_trans *tr, gtr_update_table_fptr gtr_update_table_f )
{
+ int ok = LOG_OK;
node *sn;
- for(sn = tr->schemas.set->h; sn; sn = sn->next) {
+ for(sn = tr->schemas.set->h; sn && ok == LOG_OK; sn = sn->next) {
sql_schema *s = sn->data;
if (!isTempSchema(s) && s->tables.set) {
node *n;
- for (n = s->tables.set->h; n; n = n->next) {
+ for (n = s->tables.set->h; n && ok == LOG_OK; n =
n->next) {
sql_table *t = n->data;
if (isGlobalTable(t))
- gtr_update_table(tr, t);
+ ok = gtr_update_table_f(tr, t);
}
}
}
return LOG_OK;
}
+static int
+gtr_update( sql_trans *tr )
+{
+ return _gtr_update(tr, >r_update_table);
+}
+
+int
+gtr_minmax_col( sql_trans *tr, sql_column *c)
+{
+ int ok = LOG_OK;
+ sql_delta *cbat = c->data;
+ BAT *cur;
+ lng val;
+
+ (void)tr;
+ if (store_nr_active > 0)
+ return LOG_ERR;
+
+ /* allready set */
+ if (!cbat || c->type.type->localtype >= TYPE_str || c->t->system)
+ return ok;
+
+ cur = temp_descriptor(cbat->bid);
+ if (BATgetprop(cur, GDK_MIN_VALUE)) {
+ bat_destroy(cur);
+ return ok;
+ }
+
+ BATmin(cur, &val);
+ BATsetprop(cur, GDK_MIN_VALUE, cur->ttype, &val);
+ BATmax(cur, &val);
+ BATsetprop(cur, GDK_MAX_VALUE, cur->ttype, &val);
+ bat_destroy(cur);
+ return ok;
+}
+
+static int
+gtr_minmax_table(sql_trans *tr, sql_table *t)
+{
+ int ok = LOG_OK;
+ node *n;
+
+ for (n = t->columns.set->h; ok == LOG_OK && n; n = n->next) {
+ sql_column *c = n->data;
+
+ ok = gtr_minmax_col(tr, c);
+ }
+ return ok;
+}
+
+static int
+gtr_minmax( sql_trans *tr )
+{
+ return _gtr_update(tr, >r_minmax_table);
+}
+
int
tr_update_delta( sql_trans *tr, sql_delta *obat, sql_delta *cbat, int cluster,
BUN snapshot_minsize)
{
@@ -1618,6 +1678,7 @@
sf->log_table = (update_table_fptr)&log_table;
sf->snapshot_table = (update_table_fptr)&snapshot_table;
sf->gtrans_update = (gtrans_update_fptr)>r_update;
+ sf->gtrans_minmax = (gtrans_update_fptr)>r_minmax;
return LOG_OK;
}
diff -r a773c7419829 -r 79646e95efd0 sql/src/storage/sql_storage.h
--- a/sql/src/storage/sql_storage.h Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/storage/sql_storage.h Fri May 21 20:21:01 2010 +0200
@@ -229,6 +229,7 @@
update_table_fptr log_table;
update_table_fptr update_table;
gtrans_update_fptr gtrans_update;
+ gtrans_update_fptr gtrans_minmax;
col_ins_fptr col_ins;
col_upd_fptr col_upd;
@@ -285,11 +286,10 @@
extern int
store_init(int debug, store_type store, char *logdir, char *dbname,
backend_stack stk);
-extern void
- store_exit(void);
+extern void store_exit(void);
-extern void
- store_manager(void);
+extern void store_manager(void);
+extern void minmax_manager(void);
extern void store_lock(void);
extern void store_unlock(void);
diff -r a773c7419829 -r 79646e95efd0 sql/src/storage/store.mx
--- a/sql/src/storage/store.mx Fri May 21 20:20:17 2010 +0200
+++ b/sql/src/storage/store.mx Fri May 21 20:21:01 2010 +0200
@@ -1522,6 +1522,18 @@
}
}
+void
+minmax_manager(void)
+{
+ while (active) {
+ MT_sleep_ms(30000);
+ if (store_nr_active || !active)
+ continue;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list