Changeset: 1decbe6e010b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1decbe6e010b
Modified Files:
        
Branch: default
Log Message:

merging


diffs (truncated from 527 to 300 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -590,9 +590,6 @@
 /* Define to 1 if you have the <time.h> header file. */
 #define HAVE_TIME_H 1
 
-/* Define to 1 if you have the timezone and daylight variables. */
-#define HAVE_TIMEZONE 1
-
 /* Define to 1 if you have the `trunc' function. */
 /* #undef HAVE_TRUNC */
 
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2491,19 +2491,19 @@ doFile(Mapi mid, const char *file, int u
 static void
 set_timezone(Mapi mid)
 {
-#ifdef HAVE_TIMEZONE
-#ifdef _MSC_VER
-#define timezone _timezone
-#endif
        char buf[128];
-       struct tm *tm;
-       time_t t;
+       time_t t, lt, gt;
+       struct tm *tmp;
        long tzone;
        MapiHdl hdl;
 
+       /* figure out our current timezone */
        t = time(NULL);
-       tm = localtime(&t);
-       tzone = timezone - 3600 * tm->tm_isdst;
+       tmp = gmtime(&t);
+       gt = mktime(tmp);
+       tmp = localtime(&t);
+       lt = mktime(tmp);
+       tzone = (long) (gt - lt);
        if (tzone < 0)
                snprintf(buf, sizeof(buf),
                         "SET TIME ZONE INTERVAL '+%02ld:%02ld' HOUR TO MINUTE",
@@ -2518,9 +2518,6 @@ set_timezone(Mapi mid)
                return;
        }
        mapi_close_handle(hdl);
-#else
-       (void) mid;
-#endif
 }
 
 static void usage(const char *prog, int xit)
diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -58,19 +58,19 @@
 static void
 set_timezone(Mapi mid)
 {
-#ifdef HAVE_TIMEZONE
-#ifdef _MSC_VER
-#define timezone _timezone
-#define daylight _daylight
-#define tzset _tzset
-#endif
        char buf[128];
+       time_t t, lt, gt;
+       struct tm *tmp;
        long tzone;
        MapiHdl hdl;
 
-       /* timezone and daylight are POSIX-defined variables */
-       tzset();
-       tzone = timezone - 3600 * daylight;
+       /* figure out our current timezone */
+       t = time(NULL);
+       tmp = gmtime(&t);
+       gt = mktime(tmp);
+       tmp = localtime(&t);
+       lt = mktime(tmp);
+       tzone = (long) (gt - lt);
        if (tzone < 0)
                snprintf(buf, sizeof(buf),
                         "SET TIME ZONE INTERVAL '+%02ld:%02ld' HOUR TO MINUTE",
@@ -81,9 +81,6 @@ set_timezone(Mapi mid)
                         tzone / 3600, (tzone % 3600) / 60);
        if ((hdl = mapi_query(mid, buf)) != NULL)
                mapi_close_handle(hdl);
-#else
-       (void) mid;
-#endif
 }
 
 static void
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2530,16 +2530,6 @@ AH_VERBATIM([__attribute__],
 #endif
 ])
 
-AC_MSG_CHECKING([if you have timezone and daylight variables])
-AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-               [[#include <time.h>]],
-               [[printf("%ld %d\n", timezone, daylight);]])],
-       AC_MSG_RESULT([yes])
-       AC_DEFINE([HAVE_TIMEZONE], 1,
-               [Define to 1 if you have the timezone and daylight variables.]),
-       AC_MSG_RESULT([no]))
-
 dnl     checks for library functions
 case $host in
        *-darwin1[[01234]]*)
diff --git a/sql/backends/monet5/UDF/Tests/udf-fuse.sql 
b/sql/backends/monet5/UDF/Tests/udf-fuse.sql
--- a/sql/backends/monet5/UDF/Tests/udf-fuse.sql
+++ b/sql/backends/monet5/UDF/Tests/udf-fuse.sql
@@ -1,3 +1,5 @@
+set optimizer = 'sequential_pipe';
+
 explain select fuse(1,2);
 select fuse(1,2);
 
diff --git a/sql/backends/monet5/UDF/Tests/udf-reverse.sql 
b/sql/backends/monet5/UDF/Tests/udf-reverse.sql
--- a/sql/backends/monet5/UDF/Tests/udf-reverse.sql
+++ b/sql/backends/monet5/UDF/Tests/udf-reverse.sql
@@ -1,3 +1,5 @@
+set optimizer = 'sequential_pipe';
+
 explain select reverse('MonetDB');
 select reverse('MonetDB');
 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1197,10 +1197,49 @@ rel_subquery_optname(mvc *sql, sql_rel *
        return rel_table_optname(sql, sq, sn->name);
 }
 
+sql_rel *
+rel_with_query(mvc *sql, symbol *q ) 
+{
+       dnode *d = q->data.lval->h;
+       symbol *select = d->next->data.sym;
+       sql_rel *rel;
+
+       stack_push_frame(sql, "WITH");
+       /* first handle all with's (ie inlined views) */
+       for (d = d->data.lval->h; d; d = d->next) {
+               symbol *sym = d->data.sym;
+               dnode *dn = sym->data.lval->h;
+               char *name = qname_table(dn->data.lval);
+               sql_rel *nrel;
+
+               if (frame_find_var(sql, name)) {
+                       return sql_error(sql, 01, "Variable '%s' allready 
declared", name);
+               }
+               nrel = rel_semantic(sql, sym);
+               if (!nrel) {  
+                       stack_pop_frame(sql);
+                       return NULL;
+               }
+               stack_push_rel_view(sql, name, nrel);
+               assert(is_project(nrel->op));
+               if (is_project(nrel->op) && nrel->exps) {
+                       node *ne = nrel->exps->h;
+
+                       for (; ne; ne = ne->next) 
+                               noninternexp_setname(sql->sa, ne->data, name, 
NULL );
+               }
+       }
+       rel = rel_semantic(sql, select);
+       stack_pop_frame(sql);
+       return rel;
+}
+
 static sql_rel *
 query_exp_optname(mvc *sql, sql_rel *r, symbol *q)
 {
        switch (q->token) {
+       case SQL_WITH:
+               return rel_with_query(sql, q);
        case SQL_UNION:
        case SQL_EXCEPT:
        case SQL_INTERSECT:
@@ -2691,11 +2730,13 @@ rel_logical_value_exp(mvc *sql, sql_rel 
        }
        default: {
                sql_exp *re, *le = rel_value_exp(sql, rel, sc, f, ek);
+               sql_subtype bt;
 
                if (!le)
                        return NULL;
                re = exp_atom_bool(sql->sa, 1);
-               if (rel_convert_types(sql, &le, &re, 1, type_equal) < 0) 
+               sql_find_subtype(&bt, "boolean", 0, 0);
+               if ((le = rel_check_type(sql, &bt, le, type_equal)) == NULL) 
                        return NULL;
                return rel_binop_(sql, le, re, NULL, "=", 0);
        }
diff --git a/sql/server/rel_select.h b/sql/server/rel_select.h
--- a/sql/server/rel_select.h
+++ b/sql/server/rel_select.h
@@ -81,5 +81,6 @@ extern char * rel_name( sql_rel *r );
 extern sql_rel *rel_groupby(sql_allocator *sa, sql_rel *l, list *groupbyexps );
 extern sql_exp *rel_groupby_add_aggr(mvc *sql, sql_rel *rel, sql_exp *e);
 extern sql_rel *rel_inplace_groupby(sql_rel *rel, sql_rel *l, list 
*groupbyexps, list *exps );
+extern sql_rel *rel_with_query(mvc *sql, symbol *q);
 
 #endif /*_REL_SELECT_H_*/
diff --git a/sql/server/rel_semantic.c b/sql/server/rel_semantic.c
--- a/sql/server/rel_semantic.c
+++ b/sql/server/rel_semantic.c
@@ -222,40 +222,7 @@ rel_semantic(mvc *sql, symbol *s)
                return rel_updates(sql, s);
 
        case SQL_WITH:
-       {
-               dnode *d = s->data.lval->h;
-               symbol *select = d->next->data.sym;
-               sql_rel *rel = NULL;
-
-               stack_push_frame(sql, "WITH");
-               /* first handle all with's (ie inlined views) */
-               for (d = d->data.lval->h; d; d = d->next) {
-                       symbol *sym = d->data.sym;
-                       dnode *dn = sym->data.lval->h;
-                       char *name = qname_table(dn->data.lval);
-                       sql_rel *nrel;
-
-                       if (frame_find_var(sql, name)) {
-                               return sql_error(sql, 01, "Variable '%s' 
allready declared", name);
-                       }
-                       nrel = rel_semantic(sql, sym);
-                       if (!nrel) {  
-                               stack_pop_frame(sql);
-                               return NULL;
-                       }
-                       stack_push_rel_view(sql, name, nrel);
-                       assert(is_project(nrel->op));
-                       if (is_project(nrel->op) && nrel->exps) {
-                               node *ne = nrel->exps->h;
-       
-                               for (; ne; ne = ne->next) 
-                                       noninternexp_setname(sql->sa, ne->data, 
name, NULL );
-                       }
-               }
-               rel = rel_semantic(sql, select);
-               stack_pop_frame(sql);
-               return rel;
-       }
+               return rel_with_query(sql, s);
 
        case SQL_MULSTMT: {
                dnode *d;
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -106,6 +106,7 @@ int yydebug=1;
        set_statement
        sql
        sqlstmt
+       with_query
        schema
        opt_schema_default_char_set
        opt_path_specification
@@ -2791,7 +2792,11 @@ join_spec:
 
 RECURSIVE and <search or cycle clause> are currently not supported
 */
-sql:
+
+sql: with_query
+       ;
+
+with_query:
        WITH with_list query_expression
        {
                dlist *l = L();
@@ -2799,7 +2804,7 @@ sql:
                append_symbol(l, $3);
                $$ = _symbol_create_list( SQL_WITH, l ); 
        }
- ;
+  ;
 
 with_list:
        with_list ',' with_list_element  { $$ = append_symbol($1, $3); }
@@ -3309,6 +3314,8 @@ subquery:
     '(' select_no_parens ')'   { $$ = $2; }
  |  '(' VALUES row_commalist ')'       
                                { $$ = _symbol_create_list( SQL_VALUES, $3); }
+ |  '(' with_query ')' 
+                               { $$ = $2; }
  ;
 
        /* simple_scalar expressions */
diff --git a/sql/test/BugTracker-2012/Tests/All 
b/sql/test/BugTracker-2012/Tests/All
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to