Update of /cvsroot/monetdb/sql/src/server
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv22374/src/server

Modified Files:
        sql_schema.mx 
Log Message:
propagated changes of Wednesday Nov 11 2009 - Thursday Nov 12 2009
from the Nov2009 branch to the development trunk

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2009/11/11 - nielsnes: src/server/sql_schema.mx,1.181.2.1
  fixed bugs in push select down
           in create table with data
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Index: sql_schema.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_schema.mx,v
retrieving revision 1.181
retrieving revision 1.182
diff -u -d -r1.181 -r1.182
--- sql_schema.mx       25 Sep 2009 12:54:29 -0000      1.181
+++ sql_schema.mx       12 Nov 2009 08:39:47 -0000      1.182
@@ -660,7 +660,7 @@
        }
 }
 
-static void
+static char *
 as_subquery( mvc *sql, sql_table *t, stmt *sq, dlist *column_spec )
 {
        if (column_spec) {
@@ -672,6 +672,8 @@
                        stmt *st = m->data;
                        sql_subtype *tp = tail_type(st);
 
+                       if (mvc_bind_column(sql, t, cname))
+                               return cname;
                        mvc_create_column(sql, t, cname, tp);
                }
        } else {
@@ -682,103 +684,14 @@
                        char *cname = column_name(st);
                        sql_subtype *tp = tail_type(st);
 
+                       if (mvc_bind_column(sql, t, cname))
+                               return cname;
                        mvc_create_column(sql, t, cname, tp);
                        _DELETE(cname);
                }
        }
-}
-
-#if 0
-static stmt *
-view_rename_columns( mvc *sql, char *name, stmt *sq, dlist *column_spec)
-{
-       dnode *n = column_spec->h;
-       node *m = sq->op1.lval->h;
-       list *l = create_stmt_list();
-
-       for (; n && m; n = n->next, m = m->next) {
-               char *cname = n->data.sval;
-               stmt *st = stmt_dup(m->data);
-
-               st = stmt_alias(st, _strdup(name), _strdup(cname));
-               list_append(l, st);
-       }
-       stmt_destroy(sq);
-       if (n || m) {
-               list_destroy(l);
-               return sql_error(sql, 02, "Column lists do not match");
-       }
-       return stmt_list(l);
-}
-
-static stmt *
-create_view(mvc *sql, sql_schema *ss, dlist *qname, dlist *column_spec, symbol 
*query, int check, int persistent)
-{
-       char *name = qname_table(qname);
-       char *sname = qname_schema(qname);
-       sql_schema *s = NULL;
-       sql_table *t = NULL;
-       int instantiate = (sql->emode == m_instantiate || !persistent);
-       int create = (!instantiate && sql->emode != m_deps);
-
-       if (sname && !(s = mvc_bind_schema(sql, sname)))
-               return sql_error(sql, 02, "CREATE VIEW: no such schema '%s'", 
sname);
-
-       if (s == NULL)
-               s = ss;
-
-       (void) check;           /* Stefan: unused!? */
-
-       if (create && (t = mvc_bind_table(sql, s, name)) != NULL) {
-               return sql_error(sql, 02, "CREATE VIEW: name '%s' already in 
use", name);
-       } else if (create && !schema_privs(sql->role_id, s)) {
-               return sql_error(sql, 02, "CREATE VIEW: access denied for %s to 
schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name);
-       } else if (query) {
-               char emode = sql->emode;
-               exp_kind ek = {type_value, card_relation, TRUE};
-               stmt *sq = NULL;
-               char *q = QUERY(sql->scanner);
-
-               if (query->token == SQL_SELECT) {
-                       SelectNode *sn = (SelectNode *) query;
-
-                       if (sn->limit >= 0)
-                               return sql_error(sql, 01, "CREATE VIEW: LIMIT 
not supported");
-                       if (sn->orderby)
-                               return sql_error(sql, 01, "CREATE VIEW: ORDER 
BY not supported");
-               }
-
-               if (create) /* for subtable we only need direct dependencies */
-                       sql->emode = m_deps;
-               sq = scope_subtable(sql, NULL, query, ek );
-               sql->emode = emode;
-               if (!sq)
-                       return NULL;
-
-               if (create) {
-                       t = mvc_create_view(sql, s, name, q, 0);
-                       as_subquery( sql, t, sq, column_spec );
-               }
-               if (!persistent && column_spec) 
-                       sq = view_rename_columns( sql, name, sq, column_spec);
-               if (create && sq && persistent) {
-                       list *view_id_l = stmt_list_dependencies(sq, 
VIEW_DEPENDENCY);
-                       list *id_l = stmt_list_dependencies(sq, 
COLUMN_DEPENDENCY);
-                       list *func_id_l = stmt_list_dependencies(sq, 
FUNC_DEPENDENCY);
-                       mvc_create_dependencies(sql, id_l, t->base.id, 
VIEW_DEPENDENCY);
-                       mvc_create_dependencies(sql, view_id_l, t->base.id, 
VIEW_DEPENDENCY);
-                       mvc_create_dependencies(sql, func_id_l, t->base.id, 
VIEW_DEPENDENCY);
-                       list_destroy(id_l);
-                       list_destroy(view_id_l);
-                       list_destroy(func_id_l);
-                       stmt_destroy(sq);
-                       return stmt_none();
-               }
-               return sq;
-       }
        return NULL;
 }
-#endif
 
 static stmt *
 drop_view(mvc *sql, dlist *qname, int drop_action)
@@ -1808,6 +1721,8 @@
                }
                return list2stmt(new_columns);
        } else { /* [col name list] as subquery with or without data */
+
+               char *n;
                stmt *sq = NULL, *res = NULL;
                dlist *as_sq = table_elements_or_subquery->data.lval;
                dlist *column_spec = as_sq->h->data.lval;
@@ -1822,7 +1737,11 @@
 
                /* create table */
                t = mvc_create_table(sql, s, name, 0, temp, commit_action, -1);
-               as_subquery(sql, t, sq, column_spec);
+               if ((n = as_subquery( sql, t, sq, column_spec)) != NULL) {
+                       sql_error(sql, 01, "CREATE TABLE: duplicate column name 
%s", n);
+                       stmt_destroy(sq);
+                       return NULL;
+               }
 
                /* insert query result into this table */
                if (with_data) {


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to