Changeset: 46a74207c25d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46a74207c25d
Modified Files:
sql/src/backends/monet5/sql.mx
sql/src/include/sql_catalog.h
sql/src/server/rel_optimizer.mx
sql/src/server/sql_mvc.mx
sql/src/server/sql_parser.mx
sql/src/storage/sql_storage.h
sql/src/storage/store.mx
Branch: default
Log Message:
Merge with Jun2010 branch.
diffs (truncated from 309 to 300 lines):
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/backends/monet5/sql.mx
--- a/sql/src/backends/monet5/sql.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/backends/monet5/sql.mx Wed Jul 07 17:30:06 2010 +0200
@@ -1814,7 +1814,7 @@
} else if (!schema_privs(sql->role_id, s)) {
return sql_message( "CREATE SEQUENCE: insufficient privileges
for '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
}
- sql_trans_create_sequence(sql->session->tr, s, seq->base.name,
seq->start, seq->minvalue, seq->maxvalue, seq->increment, seq->cacheinc,
seq->cycle);
+ sql_trans_create_sequence(sql->session->tr, s, seq->base.name,
seq->start, seq->minvalue, seq->maxvalue, seq->increment, seq->cacheinc,
seq->cycle, seq->bedropped);
return NULL;
}
@@ -1848,17 +1848,21 @@
drop_seq(mvc *sql, char *sname, char *name)
{
sql_schema *s = NULL;
+ sql_sequence *seq = NULL;
if (sname && !(s = mvc_bind_schema(sql, sname)))
return sql_message("DROP SEQUENCE: no such schema '%s'", sname);
if (!s)
s = cur_schema(sql);
- if (!find_sql_sequence(s, name)) {
+ if (!(seq = find_sql_sequence(s, name))) {
return sql_message("DROP SEQUENCE: no such sequence '%s'",
name);
} else if (!schema_privs(sql->role_id, s)) {
return sql_message("DROP SEQUENCE: insufficient privileges for
'%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
}
- sql_trans_drop_sequence(sql->session->tr, s, name, 0);
+ if (mvc_check_dependency(sql, seq->base.id, BEDROPPED_DEPENDENCY, NULL))
+ return sql_message("DROP SEQUENCE: unable to drop sequence %s
(there are database objects which depend on it)\n", seq->base.name);
+
+ sql_trans_drop_sequence(sql->session->tr, s, seq, 0);
return NULL;
}
diff -r e4ae9e48d397 -r 46a74207c25d
sql/src/benchmarks/arno_flt/Tests/init.stable.out.Windows
--- a/sql/src/benchmarks/arno_flt/Tests/init.stable.out.Windows Wed Jul 07
16:55:54 2010 +0200
+++ b/sql/src/benchmarks/arno_flt/Tests/init.stable.out.Windows Wed Jul 07
17:30:06 2010 +0200
@@ -10,6 +10,23 @@
# Compiled for i686-redhat-linux-gnu/32bit; dynamically linked.
# Visit http://monetdb.cwi.nl/ for further information.
+# MonetDB server v5.19.0, based on kernel v1.37.0
+# Serving database 'mTests_src_benchmarks_arno_flt', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically
linked
+# Found 7.751 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2010 MonetDB B.V., all rights reserved
+# Visit http://monetdb.cwi.nl/ for further information
+# Listening for connection requests on mapi:monetdb://eir.ins.cwi.nl:31295/
+# MonetDB/SQL module v2.37.0 loaded
+function user.main():void;
+ INT_MAX := 2147483647;
+ dbgmsk := mdb.getDebug();
+ unset := calc.+(8,8388608);
+ keep := calc.xor(INT_MAX,unset);
+ set := calc.and(dbgmsk,keep);
+ mdb.setDebug(set);
+end main;
Ready.
diff -r e4ae9e48d397 -r 46a74207c25d
sql/src/benchmarks/wisconsin/Tests/load.timeout
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/src/benchmarks/wisconsin/Tests/load.timeout Wed Jul 07 17:30:06
2010 +0200
@@ -0,0 +1,1 @@
+2
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/include/sql_catalog.h
--- a/sql/src/include/sql_catalog.h Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/include/sql_catalog.h Wed Jul 07 17:30:06 2010 +0200
@@ -60,6 +60,7 @@
#define TYPE_DEPENDENCY 11
#define SEQ_DEPENDENCY 12
#define PROC_DEPENDENCY 13
+#define BEDROPPED_DEPENDENCY 14 /*The object must be dropped
when the dependent object is dropped independently of the DROP type.*/
#define NO_DEPENDENCY 0
#define HAS_DEPENDENCY 1
#define CICLE_DEPENDENCY 2
@@ -328,6 +329,7 @@
lng increment;
lng cacheinc;
bit cycle;
+ bit bedropped; /*Drop the SEQUENCE if you are dropping the
column, e.g., SERIAL COLUMN".*/
sql_schema *s;
} sql_sequence;
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/rel_optimizer.mx
--- a/sql/src/server/rel_optimizer.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/rel_optimizer.mx Wed Jul 07 17:30:06 2010 +0200
@@ -1073,8 +1073,13 @@
return e;
case e_cmp:
if (e->flag == cmp_or) {
- list *l = exps_push_down(sql, e->l, f, t);
- list *r = exps_push_down(sql, e->r, f, t);
+ list *l;
+ list *r;
+ /* for SkyTec's query in bug #2595, allow to disable
this */
+ if (mvc_debug_on(sql, 65536))
+ return NULL;
+ l = exps_push_down(sql, e->l, f, t);
+ r = exps_push_down(sql, e->r, f, t);
if (!l || !r) {
list_destroy(l);
list_destroy(r);
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/rel_sequence.mx
--- a/sql/src/server/rel_sequence.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/rel_sequence.mx Wed Jul 07 17:30:06 2010 +0200
@@ -104,7 +104,8 @@
lng min,
lng max,
lng cache,
- int cycle)
+ int cycle,
+ int bedropped)
{
sql_rel *res = NULL;
sql_sequence *seq = NULL;
@@ -135,6 +136,7 @@
if (cache <= 0) cache = 1;
seq = create_sql_sequence(sql->sa, s, name, start, min, max, inc,
cache, cycle);
+ seq->bedropped = bedropped;
res = rel_seq(DDL_CREATE_SEQ, s->base.name, seq, NULL, NULL);
if (res)
stack_push_rel_view(sql, name, rel_dup(res));
@@ -229,6 +231,7 @@
assert(h->h->next->next->next->type == type_lng);
assert(h->h->next->next->next->next->type == type_lng);
assert(h->h->next->next->next->next->next->type ==
type_int);
+ assert(h->h->next->next->next->next->next->next->type
== type_int);
res = rel_create_seq(
/* mvc* sql */ sql,
/* sql_schema* s */ cur_schema(sql),
@@ -239,7 +242,8 @@
/* lng min */ h->h->next->next->data.l_val,
/* lng max */ h->h->next->next->next->data.l_val,
/* lng cache */ h->h->next->next->next->next->data.l_val,
-/* int cycle */ h->h->next->next->next->next->next->data.i_val);
+/* int cycle */ h->h->next->next->next->next->next->data.i_val,
+/* int bedropped */ h->h->next->next->next->next->next->next->data.i_val);
}
break;
case SQL_ALTER_SEQ:
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/sql_mvc.mx
--- a/sql/src/server/sql_mvc.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/sql_mvc.mx Wed Jul 07 17:30:06 2010 +0200
@@ -1313,7 +1313,7 @@
{
if (mvc_debug)
fprintf(stderr, "mvc_create_dependency %d %d %d\n", id,
depend_id, depend_type);
- if (id != depend_id)
+ if ( (id != depend_id) || (depend_type == BEDROPPED_DEPENDENCY) )
sql_trans_create_dependency(m->session->tr, id, depend_id,
depend_type);
}
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/sql_parser.mx
--- a/sql/src/server/sql_parser.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/sql_parser.mx Wed Jul 07 17:30:06 2010 +0200
@@ -1280,6 +1280,7 @@
append_lng(l, $4);
append_lng(l, $5);
append_int(l, $6);
+ append_int(l, 0); /* bedropped */
$$ = l;
}
;
@@ -1556,6 +1557,7 @@
append_lng(o, 0); /* max */
append_lng(o, 1); /* cache */
append_int(o, 0); /* cycle */
+ append_int(o, 1); /* bedropped */
append_list(l, o);
if (m->sym) {
@@ -1689,6 +1691,7 @@
append_lng(o, 0); /* max */
append_lng(o, 1); /* cache */
append_int(o, 0); /* cycle */
+ append_int(o, 0); /* bedropped */
append_list(l, o);
if (m->scanner.schema)
append_string(seqn2, m->scanner.schema);
@@ -1715,6 +1718,7 @@
append_lng($$, -1); /* max */
append_lng($$, -1); /* cache */
append_int($$, 0); /* cycle */
+ append_int($$, 0); /* bedropped */
}
| '(' opt_seq_params ')' { $$ = $2; }
;
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/sql_schema.mx
--- a/sql/src/server/sql_schema.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/sql_schema.mx Wed Jul 07 17:30:06 2010 +0200
@@ -583,24 +583,30 @@
{
char *server, * db, *db_alias, *user, *lang, *passwd;
int *id = GDKmalloc(sizeof(int)), *port = GDKmalloc(sizeof(int));
- symbol *user_symb = qname->h->next->next->next->next->data.sym;
+ symbol *user_symb = NULL;
char *default_dbalias;
- assert(qname->h->next->type == type_int);
- *port = qname->h->next->data.i_val;
*id = -1;
- server = GDKstrdup(qname->h->data.sval);
- db = GDKstrdup(qname->h->next->next->data.sval);
- user = GDKstrdup(user_symb->data.lval->h->data.sval);
- passwd = GDKstrdup(user_symb->data.lval->h->next->data.sval);
- if (qname->h->next->next->next->data.sval == NULL){
+ if (qname->cnt) {
+ user_symb = qname->h->next->next->next->next->data.sym;
+ assert(qname->h->next->type == type_int);
+ *port = qname->h->next->data.i_val;
+ server = GDKstrdup(qname->h->data.sval);
+ db = GDKstrdup(qname->h->next->next->data.sval);
+ user = GDKstrdup(user_symb->data.lval->h->data.sval);
+ passwd = GDKstrdup(user_symb->data.lval->h->next->data.sval);
+ } else {
+ return sql_error(sql, 02, "CONNECT TO: DEFAULT is not
supported!");
+ }
+
+ if (!qname->cnt || qname->h->next->next->next->data.sval == NULL){
default_dbalias = sql_message( "%s_%s_%s", server, db, user);
db_alias = default_dbalias;
} else {
db_alias = GDKstrdup(qname->h->next->next->next->data.sval);
}
- if (qname->h->next->next->next->next->next->data.sval == NULL){
+ if (!qname->cnt || qname->h->next->next->next->next->next->data.sval ==
NULL){
lang = GDKstrdup("sql");
}
else {
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/storage/sql_storage.h
--- a/sql/src/storage/sql_storage.h Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/storage/sql_storage.h Wed Jul 07 17:30:06 2010 +0200
@@ -343,8 +343,8 @@
extern void sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, int id, int
drop_action);
extern sql_sequence *create_sql_sequence(sql_allocator *sa, sql_schema *s,
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle );
-extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s,
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle );
-extern void sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name,
int drop_action);
+extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s,
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle, bit
bedropped );
+extern void sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, sql_sequence
*seq, int drop_action);
extern sql_sequence *sql_trans_alter_sequence(sql_trans *tr, sql_sequence
*seq, lng min, lng max, lng inc, lng cache, lng cycle);
extern lng sql_trans_sequence_restart(sql_trans *tr, sql_sequence *seq, lng
start);
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/storage/store.mx
--- a/sql/src/storage/store.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/storage/store.mx Wed Jul 07 17:30:06 2010 +0200
@@ -3235,6 +3235,7 @@
assert(rid != oid_nil);
table_funcs.table_delete(tr, sysseqs, rid);
+ sql_trans_drop_dependencies(tr, seq->base.id);
if (drop_action)
sql_trans_drop_all_dependencies(tr, seq->s, seq->base.id,
SEQ_DEPENDENCY);
@@ -3258,10 +3259,15 @@
if (col->def && (seq_pos = strstr(col->def, next_value_for))) {
sql_sequence * seq = NULL;
char *seq_name = _strdup(seq_pos + (strlen(next_value_for) -
strlen("seq_")));
+ node *n = NULL;
seq_name[strlen(seq_name)-1] = '\0';
+ n = cs_find_name(&syss->seqs, seq_name);
seq = find_sql_sequence(syss, seq_name);
- if (seq)
+ if (seq && sql_trans_get_dependency_type(tr, seq->base.id,
BEDROPPED_DEPENDENCY)) {
sys_drop_sequence(tr, seq, drop_action);
+ seq->base.wtime = syss->base.wtime = tr->wtime =
tr->stime;
+ cs_del(&syss->seqs, n, seq->base.flag);
+ }
_DELETE(seq_name);
}
@@ -4508,7 +4514,7 @@
}
sql_sequence *
-sql_trans_create_sequence(sql_trans *tr, sql_schema *s, char *name, lng start,
lng min, lng max, lng inc, lng cacheinc, bit cycle )
+sql_trans_create_sequence(sql_trans *tr, sql_schema *s, char *name, lng start,
lng min, lng max, lng inc, lng cacheinc, bit cycle, bit bedropped )
{
sql_schema *syss = find_sql_schema(tr, "sys");
sql_table *sysseqs = find_sql_table(syss, "sequences");
@@ -4517,15 +4523,18 @@
cs_add(&s->seqs, seq, TR_NEW);
table_funcs.table_insert(tr, sysseqs, &seq->base.id, &s->base.id,
seq->base.name, &seq->start, &seq->minvalue, &seq->maxvalue, &seq->increment,
&seq->cacheinc, &seq->cycle);
s->base.wtime = tr->wtime = tr->stime;
+
+ /*Create a BEDROPPED dependency for a SERIAL COLUMN*/
+ if (bedropped)
+ sql_trans_create_dependency(tr, seq->base.id, seq->base.id,
BEDROPPED_DEPENDENCY);
+
return seq;
}
void
-sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name, int
drop_action)
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list