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

Modified Files:
        rel_select.mx sql_atom.mx sql_parser.mx 
Log Message:
order by expressions are now even more powerfull (ugh)


U rel_select.mx
Index: rel_select.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/rel_select.mx,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -d -r1.136 -r1.137
--- rel_select.mx       16 Mar 2009 22:25:16 -0000      1.136
+++ rel_select.mx       18 Mar 2009 10:18:13 -0000      1.137
@@ -1436,13 +1436,7 @@
 
        assert(column_r->token == SQL_COLUMN && 
                (column_r->type == type_list || column_r->type == type_int));
-       if (column_r->type == type_int) { /* dirty old column refs by number */
-               sql_exp *e = exps_get_exp((*rel)->exps, column_r->data.i_val);
-               
-               if (!e)
-                       return NULL;
-               return exp_column(e->rname, e->r, exp_subtype(e), (*rel)->card, 
has_nil(e), is_intern(e));
-       }
+
        if (dlist_length(l) == 1 && l->h->type == type_int) {
                int nr = l->h->data.i_val;
                atom *a;
@@ -3713,8 +3707,25 @@
                        int direction = order->data.lval->h->next->data.i_val;
                        sql_exp *e = NULL;
 
-                       if (col->token == SQL_COLUMN)
+                       if (col->token == SQL_COLUMN) {
                                e = rel_column_ref(sql, &rel, col, f);
+                               if (e && e->card <= CARD_ATOM) {
+                                       sql_subtype *tpe = e->f;
+                                       /* integer atom on the stack */
+                                       if (e->type == e_atom && 
+                                           tpe->type->eclass == EC_NUM) {
+                                               atom *a = 
e->l?e->l:sql->args[e->flag];
+                                               int nr = (int)atom_get_int(a);
+
+                                               e = exps_get_exp(rel->exps, nr);
+                                               if (!e)
+                                                       return NULL;
+                                               e = exp_column(e->rname, e->r, 
exp_subtype(e), rel->card, has_nil(e), is_intern(e));
+                                       } else {
+                                               return sql_error(sql, 02, 
"order not of type SQL_COLUMN\n");
+                                       }
+                               }
+                       }
 
                        assert(order->data.lval->h->next->type == type_int);
                        if (or != rel)

U sql_parser.mx
Index: sql_parser.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_parser.mx,v
retrieving revision 1.304
retrieving revision 1.305
diff -u -d -r1.304 -r1.305
--- sql_parser.mx       9 Mar 2009 20:38:06 -0000       1.304
+++ sql_parser.mx       18 Mar 2009 10:18:14 -0000      1.305
@@ -3059,26 +3059,11 @@
  ;
 
 ordering_spec:
-    column_ref opt_asc_desc
-       { dlist *l = L();
-         append_symbol(l, _symbol_create_list(SQL_COLUMN, $1));
-         append_int(l, $2);
-         $$ = _symbol_create_list(SQL_COLUMN, l ); }
- | func_ref opt_asc_desc
-       { dlist *l = L();
-         append_symbol(l, $1);
-         append_int(l, $2);
-         $$ = _symbol_create_list(SQL_COLUMN, l ); }
- | aggr_ref opt_asc_desc
+    scalar_exp opt_asc_desc
        { dlist *l = L();
          append_symbol(l, $1);
          append_int(l, $2);
          $$ = _symbol_create_list(SQL_COLUMN, l ); }
- | nonzero opt_asc_desc
-       { dlist *l = L();
-         append_symbol(l, _symbol_create_int(SQL_COLUMN, $1));
-         append_int(l, $2);
-         $$ = _symbol_create_list(SQL_COLUMN, l ); }
 
  ;
 

U sql_atom.mx
Index: sql_atom.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_atom.mx,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -d -r1.65 -r1.66
--- sql_atom.mx 17 Feb 2009 00:54:41 -0000      1.65
+++ sql_atom.mx 18 Mar 2009 10:18:14 -0000      1.66
@@ -62,6 +62,9 @@
 extern void atom_destroy(atom *a);
 
 extern void atom_dump(atom *a, stream *s);
+
+extern lng atom_get_int(atom *a);
+
 #endif /* _SQL_ATOM_H_ */
 
 @c
@@ -136,6 +139,34 @@
        }
 }
 
+lng 
+atom_get_int(atom *a)
+{
+       lng r = 0;
+
+       if (!a->isnull) {
+               switch (ATOMstorage(a->data.vtype)) {
+               case TYPE_bte:
+                       r = a->data.val.btval;
+                       break;
+               case TYPE_sht:
+                       r = a->data.val.shval;
+                       break;
+               case TYPE_int:
+                       r = a->data.val.ival;
+                       break;
+               case TYPE_wrd:
+                       r = a->data.val.wval;
+                       break;
+               case TYPE_lng:
+                       r = a->data.val.lval;
+                       break;
+               }
+       }
+       return r;
+}
+
+
 atom *
 atom_dec(sql_subtype *tpe, lng val, double dval)
 {


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to