Changeset: 11422cdd2840 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=11422cdd2840
Modified Files:
MonetDB5/src/modules/atoms/url.mx
sql/src/backends/monet5/sql.mx
sql/src/backends/monet5/sql_gencode.mx
sql/src/backends/monet5/sql_result.mx
sql/src/backends/monet5/sql_scenario.mx
sql/src/server/rel_updates.c
sql/src/server/sql_mvc.c
sql/src/server/sql_mvc.h
sql/src/server/sql_parser.y
sql/src/server/sql_qc.c
sql/src/server/sql_qc.h
sql/src/server/sql_scan.c
sql/src/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.sql
sql/src/test/BugTracker-2010/Tests/limit_in_prepare.Bug-2552.sql
sql/src/test/BugTracker/Tests/decimal_prepare.SF-1655818.sql
sql/src/test/BugTracker/Tests/large_prepare.SF-1363729.sql
sql/src/test/BugTracker/Tests/large_prepare_2.SF-1363729.sql
Branch: default
Log Message:
merged query cache and prepared statement store. This will allow using
Xclose statements to cleanup prepared statements.
diffs (truncated from 548 to 300 lines):
diff -r 760f20e36ab4 -r 11422cdd2840 MonetDB5/src/modules/atoms/url.mx
--- a/MonetDB5/src/modules/atoms/url.mx Sun Dec 12 21:46:00 2010 +0100
+++ b/MonetDB5/src/modules/atoms/url.mx Mon Dec 13 08:57:01 2010 +0100
@@ -65,6 +65,10 @@
address URLnoop
comment "Create an URL from a string literal";
+command calc.url(s:str) :url
+address URLnoop
+comment "Create an URL from a string literal";
+
command calc.url(s:url) :url
address URLnoop
comment "Create an URL from a string literal";
diff -r 760f20e36ab4 -r 11422cdd2840 sql/src/backends/monet5/sql.mx
--- a/sql/src/backends/monet5/sql.mx Sun Dec 12 21:46:00 2010 +0100
+++ b/sql/src/backends/monet5/sql.mx Mon Dec 13 08:57:01 2010 +0100
@@ -270,7 +270,7 @@
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) :bat[:str,:bat]
+ sep:str, rsep:str, ssep:str, ns:str, nr:lng, offset:lng, locked:int)
:bat[:str,:bat]
address mvc_import_table_wrap
comment "Import a table from bstream s with the
given tuple and seperators (sep/rsep)";
@@ -290,7 +290,8 @@
ns:str,
fname:str,
nr:lng,
- offset:lng
+ offset:lng,
+ locked:int
):bat[:str,:bat];
cs := str.codeset();
f := str.iconv(fname, "UTF-8", cs);
@@ -300,7 +301,7 @@
bs := bstream.create(s, 33554432);
#bs := bstream.create(s, 67108864);
- res := sql.importTable(bs, sname, tname, tsep, rsep, ssep, ns, nr,
offset);
+ res := sql.importTable(bs, sname, tname, tsep, rsep, ssep, ns, nr,
offset, locked);
bstream.destroy(bs);
return res;
end copy_from;
@@ -313,10 +314,11 @@
ssep:str,
ns:str,
nr:lng,
- offset:lng
+ offset:lng,
+ locked:int
):bat[:str,:bat];
in := io.stdin();
- res := sql.importTable(in, sname, tname, tsep, rsep, ssep, ns, nr,
offset);
+ res := sql.importTable(in, sname, tname, tsep, rsep, ssep, ns, nr,
offset, locked);
return res;
end copyfrom;
@@ -3108,6 +3110,7 @@
unsigned char **N = (unsigned char **) getArgReference(stk, pci, 7);
lng *sz = (lng *) getArgReference(stk, pci, 8);
lng *offset = (lng *) getArgReference(stk, pci, 9);
+ int *locked = (int *) getArgReference(stk, pci, 10);
if (msg)
return msg;
@@ -3122,7 +3125,7 @@
}
len = strlen((char*)(*N));
GDKstrFromStr(ns=GDKmalloc(len+1), *N, len); len = 0;
- b = mvc_import_table(cntxt, m, *s, *sname, *tname, (char*)tsep,
(char*)rsep, (char*)ssep, (char*)ns, *sz, *offset);
+ b = mvc_import_table(cntxt, m, *s, *sname, *tname, (char*)tsep,
(char*)rsep, (char*)ssep, (char*)ns, *sz, *offset, *locked);
GDKfree(tsep);
GDKfree(rsep);
if(ssep)
@@ -4724,8 +4727,10 @@
BUNins(t, "count", &count->batCacheid, FALSE);
for(q = m->qc->q; q; q = q->next) {
- BUNappend(query, q->codestring, FALSE);
- BUNappend(count, &q->count, FALSE);
+ if (q->type != Q_PREPARE) {
+ BUNappend(query, q->codestring, FALSE);
+ BUNappend(count, &q->count, FALSE);
+ }
}
BBPunfix(query->batCacheid);
diff -r 760f20e36ab4 -r 11422cdd2840 sql/src/backends/monet5/sql_gencode.mx
--- a/sql/src/backends/monet5/sql_gencode.mx Sun Dec 12 21:46:00 2010 +0100
+++ b/sql/src/backends/monet5/sql_gencode.mx Mon Dec 13 08:57:01 2010 +0100
@@ -1377,7 +1377,8 @@
if (s->nrcols == 0) { /* simple calc */
q = newStmt1(mb, calcRef, convert);
} else if (s->nrcols > 0 &&
- (f->type->eclass == EC_DEC ||
+ (t->type->localtype > TYPE_str ||
+ f->type->eclass == EC_DEC ||
t->type->eclass == EC_DEC ||
t->type->eclass == EC_INTERVAL ||
EC_TEMP(t->type->eclass) ||
diff -r 760f20e36ab4 -r 11422cdd2840 sql/src/backends/monet5/sql_result.mx
--- a/sql/src/backends/monet5/sql_result.mx Sun Dec 12 21:46:00 2010 +0100
+++ b/sql/src/backends/monet5/sql_result.mx Mon Dec 13 08:57:01 2010 +0100
@@ -40,7 +40,7 @@
extern int mvc_export_prepare(mvc *c, stream *s, cq *q, str w);
extern int mvc_export_chunk(mvc *m, stream *s, int res_id, BUN offset, BUN nr);
-extern BAT *mvc_import_table(Client cntxt, mvc *c, bstream *s, char *sname,
char *tname, char *sep, char *rsep, char *ssep, char *ns, lng nr, lng offset);
+extern BAT *mvc_import_table(Client cntxt, mvc *c, bstream *s, char *sname,
char *tname, char *sep, char *rsep, char *ssep, char *ns, lng nr, lng offset,
int locked);
extern int mvc_result_table(mvc *m, int nr_cols, int type, BAT *order);
extern int mvc_result_column(mvc *m, char *tn, char *name, char *typename, int
digits, int scale, BAT *b);
@@ -421,7 +421,7 @@
BAT *
-mvc_import_table(Client cntxt, mvc *m, bstream *bs, char *sname, char *tname,
char *sep, char *rsep, char *ssep, char *ns, lng sz, lng offset)
+mvc_import_table(Client cntxt, mvc *m, bstream *bs, char *sname, char *tname,
char *sep, char *rsep, char *ssep, char *ns, lng sz, lng offset, int locked)
{
int i = 0;
sql_schema *s = mvc_bind_schema(m, sname);
@@ -497,10 +497,18 @@
fmt[i].rawfile = NULL;
fmt[i].batfile = NULL;
fmt[i].size = ATOMsize(fmt[i].adt);
+
+ if (locked) {
+ BAT *b = store_funcs.bind_col(m->session->tr,
col, RDONLY);
+ fmt[i].c[0] = b;
+ fmt[i].ci[0] = bat_iterator(fmt[i].c[0]);
+ }
}
- if (TABLETcreate_bats(&as, (BUN) (sz < 0 ? 1000 : sz)) >= 0) {
- if (SQLload_file(cntxt, &as, bs, out, sep, rsep,
ssep?ssep[0]:0, offset, sz) != BUN_NONE && !as.error)
+ if (locked || TABLETcreate_bats(&as, (BUN) (sz < 0 ? 1000 :
sz)) >= 0) {
+ if (SQLload_file(cntxt, &as, bs, out, sep, rsep,
ssep?ssep[0]:0, offset, sz) != BUN_NONE && !as.error) {
+ /* TODO in case of locked generate views which
inserted only */
bats = TABLETcollect_bats(&as);
+ }
}
if (as.error)
sql_error(m, 500, "%s", as.error);
diff -r 760f20e36ab4 -r 11422cdd2840 sql/src/backends/monet5/sql_scenario.mx
--- a/sql/src/backends/monet5/sql_scenario.mx Sun Dec 12 21:46:00 2010 +0100
+++ b/sql/src/backends/monet5/sql_scenario.mx Mon Dec 13 08:57:01 2010 +0100
@@ -638,7 +638,6 @@
be = sql;
sql = backend_create(m, c);
m->qc = NULL;
- m->prepare_qc = NULL;
m->caching = 0;
m->user_id = m->role_id = USER_MONETDB;
@@ -1268,7 +1267,7 @@
be->q = NULL;
if (m->emode == m_execute) {
assert(m->sym->data.lval->h->type == type_int);
- be->q = qc_find(m->prepare_qc,
m->sym->data.lval->h->data.i_val);
+ be->q = qc_find(m->qc, m->sym->data.lval->h->data.i_val);
if (!be->q) {
err = -1;
sql_error(m, 2, "no prepared statement with the given
id\n");
@@ -1311,12 +1310,13 @@
m->emode = m_normal;
} else {
/* generate a factory instantiation */
- be->q = qc_insert((m->emode ==
m_prepare)?m->prepare_qc:m->qc,
+ be->q = qc_insert(m->qc,
m->sa, /* the allocator */
m->sym, /* the sql symbol tree */
m->args, /* the argument list */
m->argc,
m->scanner.key ^
m->session->schema->base.id,/* the statement hash key */
+ (m->emode == m_prepare)?Q_PREPARE:
m->type,/* the type of the statement
*/
sql_escape_str(QUERY(m->scanner)));
diff -r 760f20e36ab4 -r 11422cdd2840 sql/src/server/rel_updates.c
--- a/sql/src/server/rel_updates.c Sun Dec 12 21:46:00 2010 +0100
+++ b/sql/src/server/rel_updates.c Mon Dec 13 08:57:01 2010 +0100
@@ -492,7 +492,7 @@
}
static sql_rel *
-rel_import(mvc *sql, sql_table *t, char *tsep, char *rsep, char *ssep, char
*ns, char *filename, lng nr, lng offset)
+rel_import(mvc *sql, sql_table *t, char *tsep, char *rsep, char *ssep, char
*ns, char *filename, lng nr, lng offset, int locked)
{
sql_rel *res;
list *exps, *args;
@@ -515,8 +515,13 @@
if (filename)
append( args, exp_atom_str(sql->sa, filename, &tpe));
- import = exp_op(sql->sa, append(
- append( args, exp_atom_lng(sql->sa, nr)), exp_atom_lng(sql->sa,
offset)), f);
+ import = exp_op(sql->sa,
+ append(
+ append(
+ append( args,
+ exp_atom_lng(sql->sa, nr)),
+ exp_atom_lng(sql->sa, offset)),
+ exp_atom_int(sql->sa, locked)), f);
exps = new_exp_list(sql->sa);
for (n = t->columns.set->h; n; n = n->next) {
@@ -528,7 +533,7 @@
}
static sql_rel *
-copyfrom(mvc *sql, dlist *qname, dlist *files, dlist *seps, dlist *nr_offset,
str null_string)
+copyfrom(mvc *sql, dlist *qname, dlist *files, dlist *seps, dlist *nr_offset,
str null_string, int locked)
{
sql_rel *rel = NULL;
char *sname = qname_schema(qname);
@@ -571,7 +576,7 @@
for (; n; n = n->next) {
char *fname = n->data.sval;
- sql_rel *nrel = rel_import(sql, t, tsep, rsep, ssep,
ns, fname, nr, offset);
+ sql_rel *nrel = rel_import(sql, t, tsep, rsep, ssep,
ns, fname, nr, offset, locked);
if (!rel)
rel = nrel;
@@ -581,12 +586,11 @@
return rel;
}
} else {
- rel = rel_import(sql, t, tsep, rsep, ssep, ns, NULL, nr,
offset);
+ rel = rel_import(sql, t, tsep, rsep, ssep, ns, NULL, nr,
offset, locked);
}
if (!rel)
return rel;
- rel = rel_insert_cluster(sql, t, rel);
- return rel;
+ return rel_insert_cluster(sql, t, rel);
}
static sql_rel *
@@ -651,8 +655,7 @@
append(exps, exp_column(sql->sa, t->base.name, c->base.name,
&c->type, CARD_MULTI, c->null, 0));
}
res = rel_table_func(sql->sa, import, exps);
- res = rel_insert_cluster(sql, t, res);
- return res;
+ return rel_insert_cluster(sql, t, res);
}
static sql_rel *
@@ -710,7 +713,7 @@
{
dlist *l = s->data.lval;
- ret = copyfrom(sql, l->h->data.lval, l->h->next->data.lval,
l->h->next->next->data.lval, l->h->next->next->next->data.lval,
l->h->next->next->next->next->data.sval);
+ ret = copyfrom(sql, l->h->data.lval, l->h->next->data.lval,
l->h->next->next->data.lval, l->h->next->next->next->data.lval,
l->h->next->next->next->next->data.sval,
l->h->next->next->next->next->next->data.i_val);
sql->type = Q_UPDATE;
}
break;
diff -r 760f20e36ab4 -r 11422cdd2840 sql/src/server/sql_mvc.c
--- a/sql/src/server/sql_mvc.c Sun Dec 12 21:46:00 2010 +0100
+++ b/sql/src/server/sql_mvc.c Mon Dec 13 08:57:01 2010 +0100
@@ -160,14 +160,14 @@
store_lock();
schema_changed = sql_trans_begin(m->session);
- if (m->cache && (schema_changed || m->qc->id > 10000 || err)){
- if (m->qc)
- qc_destroy(m->qc);
- m->qc = qc_create(m->clientid);
- }
- if (m->prepare_qc && (schema_changed || err)) {
- qc_destroy(m->prepare_qc);
- m->prepare_qc = qc_create(m->clientid);
+ if (m->qc && (schema_changed || m->qc->nr > 20000 || err)){
+ if (schema_changed || err) {
+ if (m->qc)
+ qc_destroy(m->qc);
+ m->qc = qc_create(m->clientid);
+ } else { /* clean all but the prepared statements */
+ qc_clean(m->qc);
+ }
}
if (m->session->active)
m->type = Q_TRANS;
@@ -276,10 +276,8 @@
assert(m->session->active); /* only abort an active transaction */
store_lock();
- if (m->qc) {
- qc_destroy(m->qc);
- m->qc = qc_create(m->clientid);
- }
+ if (m->qc)
+ qc_clean(m->qc);
if (name && name[0] != '\0') {
while (tr && (!tr->name || strcmp(tr->name, name) != 0))
tr = tr->parent;
@@ -380,7 +378,6 @@
m->errstr[ERRSIZE-1] = '\0';
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list