Changeset: 7a38d577f1c6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7a38d577f1c6
Modified Files:
sql/src/server/rel_dump.mx
sql/src/server/rel_exp.mx
sql/src/server/rel_schema.mx
sql/src/server/rel_semantic.mx
sql/src/test/BugTracker-2010/Tests/crash-with-huge-query.Bug-2647.stable.out
Branch: Oct2010
Log Message:
fixed bug 2647. The columns of a 'with view' are now correctly named (ie
with relation and column names).
diffs (truncated from 404 to 300 lines):
diff -r 333e14ad51c7 -r 7a38d577f1c6 sql/src/server/rel_dump.mx
--- a/sql/src/server/rel_dump.mx Tue Oct 19 09:13:30 2010 +0200
+++ b/sql/src/server/rel_dump.mx Tue Oct 19 21:35:47 2010 +0200
@@ -409,11 +409,13 @@
} else
rel_print_(sql, fout, rel->l, depth+1, refs);
- if (rel_is_ref(rel->r)) {
- int nr = find_ref(refs, rel->r);
- mnstr_printf(fout, " & REF %d ", nr);
- } else
- rel_print_(sql, fout, rel->r, depth+1, refs);
+ if (rel->r) {
+ if (rel_is_ref(rel->r)) {
+ int nr = find_ref(refs, rel->r);
+ mnstr_printf(fout, " & REF %d ", nr);
+ } else
+ rel_print_(sql, fout, rel->r, depth+1, refs);
+ }
print_indent(sql, fout, depth);
mnstr_printf(fout, ")");
if (rel->exps)
diff -r 333e14ad51c7 -r 7a38d577f1c6 sql/src/server/rel_exp.mx
--- a/sql/src/server/rel_exp.mx Tue Oct 19 09:13:30 2010 +0200
+++ b/sql/src/server/rel_exp.mx Tue Oct 19 21:35:47 2010 +0200
@@ -71,6 +71,7 @@
extern sql_subtype * exp_subtype( sql_exp *e );
extern char * exp_name( sql_exp *e );
+extern char * exp_relname( sql_exp *e );
extern char *exp_find_rel_name(sql_exp *e);
@@ -504,6 +505,17 @@
}
char *
+exp_relname( sql_exp *e )
+{
+ if (e->rname)
+ return e->rname;
+ if (e->type == e_column && e->l)
+ return e->l;
+ return NULL;
+}
+
+
+char *
exp_find_rel_name(sql_exp *e)
{
switch(e->type) {
diff -r 333e14ad51c7 -r 7a38d577f1c6 sql/src/server/rel_schema.mx
--- a/sql/src/server/rel_schema.mx Tue Oct 19 09:13:30 2010 +0200
+++ b/sql/src/server/rel_schema.mx Tue Oct 19 21:35:47 2010 +0200
@@ -106,7 +106,7 @@
for (; n && m; n = n->next, m = m->next) {
char *cname = n->data.sval;
sql_exp *e = m->data;
- sql_exp *n = exp_is_atom(e)?exp_dup(e):exp_column(e->rname,
e->name, exp_subtype(e), sq->card, has_nil(e), is_intern(e));
+ sql_exp *n =
exp_is_atom(e)?exp_dup(e):exp_column(exp_relname(e), e->name, exp_subtype(e),
sq->card, has_nil(e), is_intern(e));
exp_setname(n, NULL, cname);
list_append(l, n);
diff -r 333e14ad51c7 -r 7a38d577f1c6 sql/src/server/rel_semantic.mx
--- a/sql/src/server/rel_semantic.mx Tue Oct 19 09:13:30 2010 +0200
+++ b/sql/src/server/rel_semantic.mx Tue Oct 19 21:35:47 2010 +0200
@@ -254,24 +254,12 @@
for (d = d->data.lval->h; d; d = d->next) {
symbol *sym = d->data.sym;
dnode *dn = sym->data.lval->h;
- dnode *cn = sym->data.lval->h->next;
char *name = qname_table(dn->data.lval);
sql_rel *nrel;
- list *exps = NULL;
if (frame_find_var(sql, name)) {
return sql_error(sql, 01, "Variable '%s'
allready declared", name);
}
- /* add all columns */
- if (cn->data.lval) {
- dnode *n = cn->data.lval->h;
-
- exps = new_exp_list();
- for (; n; n = n->next) {
- char *cname = n->data.sval;
- append(exps, exp_column(name, cname,
NULL, CARD_MULTI, 0 /* null? */, 0));
- }
- }
nrel = rel_semantic(sql, sym);
stack_push_rel_view(sql, name, nrel);
if (!nrel) {
@@ -281,7 +269,7 @@
assert(is_project(nrel->op));
if (is_project(nrel->op) && nrel->exps) {
node *ne = nrel->exps->h;
-
+
for (; ne; ne = ne->next)
exp_setname( ne->data, name, NULL );
}
diff -r 333e14ad51c7 -r 7a38d577f1c6
sql/src/test/BugTracker-2010/Tests/crash-with-huge-query.Bug-2647.stable.out
---
a/sql/src/test/BugTracker-2010/Tests/crash-with-huge-query.Bug-2647.stable.out
Tue Oct 19 09:13:30 2010 +0200
+++
b/sql/src/test/BugTracker-2010/Tests/crash-with-huge-query.Bug-2647.stable.out
Tue Oct 19 21:35:47 2010 +0200
@@ -20,13 +20,293 @@
Over..
-# 15:46:04 >
-# 15:46:04 > mclient -lsql -ftest -i -e --host=mane-3 --port=30859
-# 15:46:04 >
+# 19:47:18 >
+# 19:47:18 > mclient -lsql -ftest -i -e --host=alf --port=31197
+# 19:47:18 >
-To be provided when server stops crashing.
+#CREATE TABLE payments (
+# id integer,
+# order_id integer default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL,
+# amount decimal(8,2) NOT NULL default '0.00',
+# creditcard_id integer default NULL,
+# paytype varchar(255) default NULL
+#);
+#CREATE TABLE addresses (
+# id integer,
+# firstname varchar(255) default NULL,
+# lastname varchar(255) default NULL,
+# address1 varchar(255) default NULL,
+# address2 varchar(255) default NULL,
+# city varchar(255) default NULL,
+# state_id integer default NULL,
+# zipcode varchar(255) default NULL,
+# country_id integer default NULL,
+# phone varchar(255) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL,
+# state_name varchar(255) default NULL
+#);
+#CREATE TABLE countries (
+# id integer,
+# iso_name varchar(255) default NULL,
+# iso varchar(255) default NULL,
+# name varchar(255) default NULL,
+# iso3 varchar(255) default NULL,
+# numcode integer default NULL
+#);
+#CREATE TABLE line_items (
+# id integer,
+# order_id integer default NULL,
+# variant_id integer default NULL,
+# quantity integer NOT NULL,
+# price decimal(8,2) NOT NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL
+#);
+#CREATE TABLE orders (
+# id integer default NULL,
+# user_id integer default NULL,
+# number varchar(255) default NULL,
+# ship_amount decimal(8,2) NOT NULL default '0.00',
+# tax_amount decimal(8,2) NOT NULL default '0.00',
+# item_total decimal(8,2) NOT NULL default '0.00',
+# total decimal(8,2) NOT NULL default '0.00',
+# ip_address varchar(255) default NULL,
+# special_instructions text,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL,
+# state varchar(255) default NULL,
+# checkout_comple
+#CREATE TABLE products (
+# id integer default NULL,
+# name varchar(255) NOT NULL default '',
+# description text,
+# master_price decimal(8,2) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL,
+# permalink varchar(255) default NULL,
+# available_on timestamp default NULL,
+# tax_category_id integer default NULL,
+# shipping_category integer default NULL,
+# deleted_at timestamp default NULL,
+# meta_description varchar(255) default NULL,
+# meta_keywords varchar(255) default NULL
+#CREATE TABLE schema_migrations (
+# version varchar(255) NOT NULL
+#);
+#CREATE TABLE shipments (
+# id integer,
+# order_id integer default NULL,
+# shipping_method_id integer default NULL,
+# tracking varchar(255) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL,
+# number varchar(255) default NULL,
+# cost decimal(8,2) default NULL,
+# shipped_at timestamp default NULL,
+# address_id integer default NULL
+#);
+#CREATE TABLE shipping_methods (
+# id integer,
+# zone_id integer default NULL,
+# shipping_calculator varchar(255) default NULL,
+# name varchar(255) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL
+#);
+#CREATE TABLE states (
+# id integer,
+# name varchar(255) default NULL,
+# abbr varchar(255) default NULL,
+# country_id integer default NULL
+#);
+#CREATE TABLE tax_categories (
+# id integer,
+# name varchar(255) default NULL,
+# description varchar(255) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL
+#);
+#CREATE TABLE tax_rates (
+# id integer default NULL,
+# zone_id integer default NULL,
+# amount decimal(8,4) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL,
+# tax_type integer default NULL,
+# tax_category_id integer default NULL
+#);
+#CREATE TABLE variants (
+# id integer default NULL,
+# product_id integer default NULL,
+# sku varchar(255) default NULL,
+# price decimal(8,2) NOT NULL,
+# weight decimal(8,2) default NULL,
+# height decimal(8,2) default NULL,
+# width decimal(8,2) default NULL,
+# depth decimal(8,2) default NULL,
+# deleted_at timestamp default NULL
+#);
+#CREATE TABLE zone_members (
+# id integer default NULL,
+# zone_id integer default NULL,
+# country_id integer default NULL,
+# zoneable_type varchar(255) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL
+#);
+#CREATE TABLE zones (
+# id integer default NULL,
+# name varchar(255) default NULL,
+# description varchar(255) default NULL,
+# created_at timestamp default NULL,
+# updated_at timestamp default NULL
+#);
+#ALTER TABLE zones
+# ADD CONSTRAINT prim_zones_id
+# PRIMARY KEY(id);
+#ALTER TABLE zones
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE orders
+# ADD CONSTRAINT prim_orders_id
+# PRIMARY KEY(id);
+#ALTER TABLE orders
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE addresses
+# ADD CONSTRAINT prim_addresses_id
+# PRIMARY KEY(id);
+#ALTER TABLE addresses
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE countries
+# ADD CONSTRAINT prim_countries_id
+# PRIMARY KEY(id);
+#ALTER TABLE countries
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE states
+# ADD CONSTRAINT prim_states_id
+# PRIMARY KEY(id);
+#ALTER TABLE states
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE states
+# ADD CONSTRAINT for_key_states_country_id
+# FOREIGN KEY (country_id) REFERENCES states(id);
+#ALTER TABLE payments
+# ADD CONSTRAINT prim_payments_id
+# PRIMARY KEY(id);
+#ALTER TABLE payments
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE payments
+# ADD CONSTRAINT for_key_payments_order_id
+# FOREIGN KEY (order_id) REFERENCES orders(id);
+#ALTER TABLE products
+# ADD CONSTRAINT prim_products_id
+# PRIMARY KEY(id);
+#ALTER TABLE products
+# ALTER COLUMN id SET NOT NULL;
+#ALTER TABLE schema_migrations
+# ADD CONSTRAINT prim_schema_migrations_id
+# PRIMARY KEY(version);
+#ALTER TABLE schema_migrations
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list