Update of /cvsroot/monetdb/pathfinder/compiler/sql
In directory sfp-cvsdas-4.v30.ch3.sourceforge.com:/tmp/cvs-serv2489/compiler/sql

Modified Files:
      Tag: M5XQ
        lalg2sql.brg 
Log Message:
propagated changes of Friday Apr 30 2010
from the XQFT branch to the M5XQ branch

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2010/04/30 - stmane: compiler/sql/lalg2sql.brg,1.168.2.5
  propagated changes of Tuesday Apr 27 2010 - Friday Apr 30 2010
  from the development trunk to the XQFT branch
  
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2010/04/27 - tsheyar: compiler/sql/lalg2sql.brg,1.174
    -- cope with polymorphic order criteria in SQL code generation
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Index: lalg2sql.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/sql/lalg2sql.brg,v
retrieving revision 1.158.2.10
retrieving revision 1.158.2.11
diff -u -d -r1.158.2.10 -r1.158.2.11
--- lalg2sql.brg        25 Apr 2010 21:05:59 -0000      1.158.2.10
+++ lalg2sql.brg        30 Apr 2010 17:39:35 -0000      1.158.2.11
@@ -2518,26 +2518,46 @@
             orderbyITER = orderby;
 
             /* transform the POS order by statement into a sortkey list */
-            orderby = col_env_lookup (COLMAP(query), pos, pos_ty);
+            if (monomorphic (pos_ty)) {
+                orderby = col_env_lookup (COLMAP(query), pos, pos_ty);
 
-            /* unfold the sorting criteria of a numbering operator */
-            if (orderby->kind == sql_over &&
-                R(orderby)->kind == sql_wnd_clause) {
-                assert (L(orderby)->kind == sql_row_number ||
-                        L(orderby)->kind == sql_dense_rank);
-                assert (!RL(orderby));
-                /* orderby may become an empty list (aka. NULL) */
-                if (RR(orderby) &&
-                    RR(orderby)->kind == sql_order_by)
-                    orderby = RRL(orderby);
-                else
+                /* unfold the sorting criteria of a numbering operator */
+                if (orderby->kind == sql_over &&
+                    R(orderby)->kind == sql_wnd_clause) {
+                    assert (L(orderby)->kind == sql_row_number ||
+                            L(orderby)->kind == sql_dense_rank);
+                    assert (!RL(orderby));
+                    /* orderby may become an empty list (aka. NULL) */
+                    if (RR(orderby) &&
+                        RR(orderby)->kind == sql_order_by)
+                        orderby = RRL(orderby);
+                    else
+                        orderby = NULL;
+                } 
+                else if (IS_LITERAL(orderby))
                     orderby = NULL;
-            } 
-            else if (IS_LITERAL(orderby))
+                else
+                    orderby = sortkey_list (sortkey_item (orderby, true));
+            } else {
                 orderby = NULL;
-            else
-                orderby = sortkey_list (sortkey_item (orderby, true));
+                for (PFalg_simple_type_t t = 1; t; t <<= 1)
+                    if (t & TYPE_MASK (pos_ty)) {
+                        PFsql_t *expr = col_env_lookup (COLMAP(query), pos, t);
 
+                        orderby = sortkey_list (
+                                      sortkey_item (
+                                          /* different handling of boolean
+                                             types as search criterion */
+                                          (expr->kind == sql_column_name ||
+                                           expr->kind == sql_lit_int     ||
+                                           t != aat_bln)
+                                          ? expr
+                                          : case_ (when (expr, TRUE_INT),
+                                                   else_ (FALSE_INT)),
+                                          true),
+                                      orderby);
+                    }
+            }
             orderbyPOS = orderby;
 
             orderby = NULL;


------------------------------------------------------------------------------
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins

Reply via email to