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

Reply via email to