Changeset: 7405ebcae242 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7405ebcae242
Modified Files:
        sql/backends/monet5/sql.mx
Branch: default
Log Message:

Merged from Dec2011


diffs (273 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -518,6 +518,10 @@ command sql.round( v:@1, d:int, s:int, r
 address @1_round_wrap
 comment "round off the decimal v(d,s) to r digits behind the dot (if r < 0, 
before the dot)";
 
+command calc.second_interval( sc:int, v:@1, ek:int, sk:int ) :lng
+address @1_dec2second_interval
+comment "cast @1 decimal to a second_interval";
+
 @
 @mal
 @:mal_round(bte)@
@@ -1289,6 +1293,7 @@ sql5_export str str_2dec_@1( @1 *res, st
 sql5_export str str_2num_@1( @1 *res, str *v, int *len );
 sql5_export str batstr_2dec_@1( int *res, int *val, int *d, int *sc );
 sql5_export str batstr_2num_@1( int *res, int *v, int *len );
+sql5_export str @1_dec2second_interval( lng *res, int *sc, @1 *dec, int *ek, 
int *sk );
 @
 @h
 @:round_export(bte)@
@@ -4143,6 +4148,28 @@ batstr_2num_@1( int *res, int *bid, int 
        BBPunfix(b->batCacheid);
        return msg;
 }
+
+str 
+@1_dec2second_interval( lng *res, int *sc, @1 *dec, int *ek, int *sk )
+{
+       lng value = *dec;
+
+       (void)ek;
+       (void)sk;
+       if (*sc < 3) {
+               int d = 3 - *sc;
+               value *= scales[d];
+       } else if (*sc > 3 ) {
+               int d = *sc - 3;
+               lng rnd = scales[d]>>1;
+
+               value += rnd;
+               value /= scales[d];
+       }
+       *res = value;
+       return MAL_SUCCEED;
+}
+
 @
 @c
 
@@ -5512,8 +5539,9 @@ second_interval_@1( lng *res, @1 *s, int
        case ihour:
                r *= 60;
        case imin:
-               r *= 60000;
+               r *= 60;
        case isec:
+               r *= 1000;
                break;
        default:
                throw(ILLARG, "calc.second_interval","illegal argument");
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -381,7 +381,13 @@ atom2sql(atom *a)
                case 13:        /* second */
                        break;
                }
-               sprintf(buf, LLFMT, v);
+               if (a->tpe.digits < 4) {
+                       sprintf(buf, LLFMT, v);
+               } else {
+                       lng sec = v/1000;
+                       lng msec = v%1000;
+                       sprintf(buf, LLFMT "." LLFMT, sec, msec);
+               }
                break;
        }
        case EC_NUM:
@@ -652,6 +658,52 @@ atom_cast(atom *a, sql_subtype *tp)
                        }
                        return 1;
                }
+               /* truncating decimals */
+               if (at->type->eclass == EC_DEC && tp->type->eclass == EC_DEC &&
+                   at->type->localtype >= tp->type->localtype &&
+                   at->digits >= tp->digits && 
+                       (at->digits - tp->digits) == (at->scale - tp->scale)) {
+                       lng mul = 1, div = 0, rnd = 0, val = 0;
+
+                       /* fix scale */
+
+                       /* only round when going to a lower scale */
+                       mul = scales[at->scale-tp->scale];
+                       rnd = mul>>1;
+                       div = 1;
+
+                       if (a->data.vtype == TYPE_lng) {
+                               val = a->data.val.lval;
+                       } else if (a->data.vtype == TYPE_int) {
+                               val = a->data.val.ival;
+                       } else if (a->data.vtype == TYPE_sht) {
+                               val = a->data.val.shval;
+                       } else if (a->data.vtype == TYPE_bte) {
+                               val = a->data.val.btval;
+                       }
+
+                       val += rnd;
+                       if (div)
+                               val /= mul;
+                       else
+                               val *= mul;
+
+                       a->tpe = *tp;
+                       a->data.vtype = tp->type->localtype;
+                       if (a->data.vtype == TYPE_lng) {
+                               a->data.val.lval = (int) val;
+                       } else if (a->data.vtype == TYPE_int) {
+                               assert( ((lng) GDK_int_min <= val && val <= 
(lng) GDK_int_max));
+                               a->data.val.ival = (int) val;
+                       } else if (a->data.vtype == TYPE_sht) {
+                               assert( ((lng) GDK_sht_min <= val && val <= 
(lng) GDK_sht_max));
+                               a->data.val.shval = (int) val;
+                       } else if (a->data.vtype == TYPE_bte) {
+                               assert( ((lng) GDK_bte_min <= val && val <= 
(lng) GDK_bte_max));
+                               a->data.val.btval = (int) val;
+                       }
+                       return 1;
+               }
                if (at->type->eclass == EC_NUM && tp->type->eclass == EC_DEC &&
                    at->type->localtype <= tp->type->localtype &&
                    (at->digits <= tp->digits || atom_num_digits(a) <= 
tp->digits) &&
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -100,7 +100,7 @@ typedef struct mvc {
        lng last_id;
 
        /* current session variables */
-       int timezone;           /* minutes west of UTC */
+       int timezone;           /* milliseconds west of UTC */
        int cache;              /* some queries should not be cached ! */
        int caching;            /* cache current query ? */
        int history;            /* queries statistics are kept  */
diff --git 
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.stable.out 
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.stable.out
--- a/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.stable.out
+++ b/sql/test/BugDay_2005-10-06_2.9.3/Tests/set_types.SF-932360.stable.out
@@ -28,12 +28,13 @@ Ready.
 % single_value # name
 % sec_interval # type
 % 0 # length
-[ 60   ]
+[ 60.000       ]
+#select current_timezone;
 % . # table_name
 % single_value # name
 % sec_interval # type
 % 0 # length
-[ 0    ]
+[ 0.000        ]
 
 # 08:23:41 >  
 # 08:23:41 >  Done.
diff --git 
a/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out 
b/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
--- a/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
+++ b/sql/test/BugTracker-2011/Tests/default-interval.Bug-2877.stable.out
@@ -57,7 +57,7 @@ Ready.
 % i,   c1,     c2 # name
 % int, sec_interval,   sec_interval # type
 % 1,   0,      0 # length
-[ 1,   3600,   3600    ]
+[ 1,   3600.000,       3600.000        ]
 #rollback;
 
 # 12:40:50 >  
diff --git 
a/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out 
b/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
--- a/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
+++ b/sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
@@ -36,7 +36,7 @@ Ready.
 % 66 # length
 function user.s3_1{autoCommit=true}():void;
     X_23 := nil:bat[:oid,:dbl];
-barrier X_61 := language.dataflow();
+barrier X_55 := language.dataflow();
     X_2 := sql.mvc();
     X_10:bat[:oid,:dbl]  := sql.bind(X_2,"sys","tab_2826","d",0);
     X_8:bat[:oid,:dbl]  := sql.bind(X_2,"sys","tab_2826","d",2);
@@ -53,7 +53,7 @@ barrier X_61 := language.dataflow();
     X_21 := algebra.markT(X_19,0@0:oid);
     X_22 := bat.reverse(X_21);
     X_23 := algebra.leftjoin(X_22,X_14);
-exit X_61;
+exit X_55;
     X_24 := sql.resultSet(1,1,X_23);
     sql.rsColumn(X_24,"sys.tab_2826","d","double",53,0,X_23);
     X_30 := io.stdout();
diff --git a/sql/test/BugTracker-2011/Tests/sqltables.Bug-2921.stable.out 
b/sql/test/BugTracker-2011/Tests/sqltables.Bug-2921.stable.out
--- a/sql/test/BugTracker-2011/Tests/sqltables.Bug-2921.stable.out
+++ b/sql/test/BugTracker-2011/Tests/sqltables.Bug-2921.stable.out
@@ -49,7 +49,7 @@ Ready.
 % .e,  .s,     .t,     .,      . # table_name
 % table_cat,   table_schem,    table_name,     table_type,     remarks # name
 % varchar,     varchar,        varchar,        varchar,        varchar # type
-% 27,  3,      7,      16,     0 # length
+% 27,  3,      8,      16,     0 # length
 [ "mTests_test_BugTracker-2011",       "tmp",  "globtemp",     "GLOBAL 
TEMPORARY",     NULL    ]
 [ "mTests_test_BugTracker-2011",       "tmp",  "loctemp",      "LOCAL 
TEMPORARY",      NULL    ]
 #select e."value" as table_cat, s."name" as table_schem, t."name" as 
table_name, case when t."type" = 0 and t."system" = false and t."temporary" = 0 
and s."name" <> 'tmp' then cast('TABLE' as varchar(20)) when t."type" = 0 and 
t."system" = false and t."temporary" = 0 and s."name" = 'tmp' then cast('GLOBAL 
TEMPORARY' as varchar(20)) when t."type" = 0 and t."system" = true and 
t."temporary" = 0 then cast('SYSTEM TABLE' as varchar(20)) when t."type" = 1 
then cast('VIEW' as varchar(20)) when t."type" = 0 and t."system" = false and 
t."temporary" = 1 then cast('LOCAL TEMPORARY' as varchar(20)) else 
cast('INTERNAL TABLE TYPE' as varchar(20)) end as table_type, cast(null as 
varchar(1)) as remarks from sys."schemas" s, sys."tables" t, sys."env"() e 
where s."id" = t."schema_id" and e.name = 'gdk_dbname' and ((t."type" = 0 and 
t."system" = false and t."temporary" = 0 and s."name" = 'tmp')) order by 
table_type, table_schem, table_name;
diff --git a/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql 
b/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
--- a/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
+++ b/sql/test/bugs/Tests/order_disjunctive_bug.SF-1338309.sql
@@ -7,8 +7,8 @@ insert into urlparts values (3857);
 insert into urlparts values (3868);
 
 SELECT * FROM urlparts WHERE urlid=218 OR urlid=219 OR
-urlid=329 OR urlid=3857 OR urlid=3868;
+urlid=329 OR urlid=3857 OR urlid=3868 order by urlid;
 
 SELECT * FROM urlparts WHERE urlid=3868 OR urlid=3857
-OR urlid=329 OR urlid=219 OR urlid=218;
+OR urlid=329 OR urlid=219 OR urlid=218 order by urlid;
 
diff --git a/sql/test/bugs/Tests/temporal.sql.src 
b/sql/test/bugs/Tests/temporal.sql.src
--- a/sql/test/bugs/Tests/temporal.sql.src
+++ b/sql/test/bugs/Tests/temporal.sql.src
@@ -1,1 +1,1 @@
-$RELSRCDIR/../../../sql/temporal.sql
+$RELSRCDIR/../../../scripts/temporal.sql
diff --git a/tools/merovingian/ChangeLog.Aug2011 
b/tools/merovingian/ChangeLog.Aug2011
--- a/tools/merovingian/ChangeLog.Aug2011
+++ b/tools/merovingian/ChangeLog.Aug2011
@@ -1,3 +1,7 @@
 # ChangeLog file for sql/src/backends/monet5/merovingian
 # This file is updated with mchangelog
 
+* Sun Nov  6 2011 Fabian Groffen <[email protected]>
+- Fixed a bug where monetdbd's socket files from /tmp were removed when
+  a second monetdbd was attempted to be started using the same port.
+
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -1024,8 +1024,6 @@ main(int argc, char *argv[])
 
        msab_init(dbfarm, NULL);
 
-       unlink(control_usock);
-       unlink(mapi_usock);
 
        /* write out the pid */
        Mfprintf(pidfile, "%d\n", (int)d->pid);
@@ -1038,6 +1036,7 @@ main(int argc, char *argv[])
        /* open up connections */
        if (
                        (e = openConnectionTCP(&sock, port, stdout)) == NO_ERR 
&&
+                       (unlink(control_usock) | unlink(mapi_usock) | 1) &&
                        (e = openConnectionUNIX(&socku, mapi_usock, 0, stdout)) 
== NO_ERR &&
                        (discovery == 1 && (e = openConnectionUDP(&usock, 
port)) == NO_ERR) &&
                        (e = openConnectionUNIX(&unsock, control_usock, 
S_IRWXO, _mero_ctlout)) == NO_ERR
@@ -1108,10 +1107,10 @@ main(int argc, char *argv[])
        }
 
        /* control channel is already closed at this point */
-       if (unlink(control_usock) == -1)
+       if (unsock != -1 && unlink(control_usock) == -1)
                Mfprintf(stderr, "unable to unlink control socket '%s': %s\n",
                                control_usock, strerror(errno));
-       if (unlink(mapi_usock) == -1)
+       if (socku != -1 && unlink(mapi_usock) == -1)
                Mfprintf(stderr, "unable to unlink mapi socket '%s': %s\n",
                                mapi_usock, strerror(errno));
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to