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