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