Update of /cvsroot/monetdb/pathfinder/compiler/sql
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv28823

Modified Files:
      Tag: XQuery_0-24
        lalg2sql.brg 
Log Message:
Supporting boolean items as sort criterion.


U lalg2sql.brg
Index: lalg2sql.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/sql/lalg2sql.brg,v
retrieving revision 1.133.2.1
retrieving revision 1.133.2.2
diff -u -d -r1.133.2.1 -r1.133.2.2
--- lalg2sql.brg        12 Jun 2008 12:39:20 -0000      1.133.2.1
+++ lalg2sql.brg        30 Jun 2008 09:01:49 -0000      1.133.2.2
@@ -4371,10 +4371,21 @@
                 bool             asc, cols_added;
                 rank_map_t      *rank_map;
 
+                               
+                               
+                               PFsql_t *expr;
+                               PFalg_simple_type_t expr_ty;
+                               
+
                 for (i = 0; i < PFord_count (sortby); i++) {
-                    ord = PFord_order_col_at (sortby, i);
+                    ord = PFord_order_col_at (sortby, i);                      
                
                     asc = PFord_order_dir_at (sortby, i) == DIR_ASC;
 
+                                       expr_ty = type_of (L(p), ord);
+                                       expr = col_env_lookup (COLMAP(L(p)),
+                                                  ord,
+                                                  expr_ty);
+
                     cols_added = false;
                     if (RANK_MAP(L(p)))
                         for (j = 0; j < PFarray_last (RANK_MAP(L(p))); j++) {
@@ -4396,10 +4407,10 @@
                     if (!cols_added)
                         *(PFsql_t **) PFarray_add (srtbylist)
                             = sortkey_item (
-                                  col_env_lookup (
-                                      COLMAP(L(p)),
-                                      ord,
-                                      type_of (L(p), ord)),
+                                       (expr->kind == sql_column_name ||
+                                                        expr->kind == 
sql_lit_int)
+                                                            ? expr
+                                                            : case_ (when 
(expr, TRUE_INT), else_ (FALSE_INT)),
                                   asc);
                 }
 
@@ -4425,20 +4436,27 @@
                 PFsql_t *srtbylist = NULL;
                 PFalg_att_t ord;
                 bool asc;
+                               PFsql_t* expr = NULL;
+                               PFalg_simple_type_t expr_ty;
 
                 /* collect all sorting criteria */
                 for (int i = PFord_count (sortby) - 1; i >= 0; i--) {
                     ord = PFord_order_col_at (sortby, i);
                     asc = PFord_order_dir_at (sortby, i) == DIR_ASC;
+
+                                       expr_ty = type_of (L(p), ord);
+                                       expr = col_env_lookup (COLMAP(L(p)),
+                                                  ord,
+                                                  expr_ty);
+
                     srtbylist = sortkey_list (
                                     sortkey_item (
-                                        col_env_lookup (
-                                            COLMAP(L(p)),
-                                            ord,
-                                            type_of (L(p), ord)),
+                                                                           
(expr->kind == sql_column_name ||
+                                                                expr->kind == 
sql_lit_int)
+                                                                    ? expr
+                                                                    : case_ 
(when (expr, TRUE_INT), else_ (FALSE_INT)),
                                         asc),
                                     srtbylist);
-
                 }
                 col_env_add (COLMAP(p),
                              p->sem.sort.res,


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to