Changeset: 39ea362344e7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39ea362344e7
Modified Files:
        sql/server/sql_atom.c
        sql/server/sql_parser.y
Branch: Jul2015
Log Message:

generate error on nil values (given as literal values)


diffs (57 lines):

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
@@ -1158,11 +1158,13 @@ atom_neg( atom *a )
                break;
        case TYPE_dbl:
                a->data.val.dval = -a->data.val.dval;
+               if (a->data.val.dval == dbl_nil)
+                       return -1;
                break;
        default:
                return -1;
        }
-       if (a->d != dbl_nil)
+       if (a->d != dbl_nil && a->tpe.type->localtype != TYPE_dbl)
                a->d = -a->d;
        return 0;
 }
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
@@ -3563,8 +3563,16 @@ simple_scalar_exp:
                          assert($2->token != SQL_COLUMN || 
$2->data.lval->h->type != type_lng);
                          if ($2->token == SQL_COLUMN && $2->data.lval->h->type 
== type_int) {
                                atom *a = sql_bind_arg(m, 
$2->data.lval->h->data.i_val);
-                               if (!atom_neg(a))
+                               if (!atom_neg(a)) {
                                        $$ = $2;
+                               } else {
+                                       char *msg = sql_message("\b22003!value 
too large or not a number");
+
+                                       yyerror(m, msg);
+                                       _DELETE(msg);
+                                       $$ = NULL;
+                                       YYABORT;
+                               }
                          } 
                          if (!$$) {
                                dlist *l = L();
@@ -4313,7 +4321,7 @@ literal:
 
                        errno = 0;
                        val = strtod($1,&p);
-                       if (p == $1 || (errno == ERANGE && (val < -1 || val > 
1))) {
+                       if (p == $1 || val == dbl_nil || (errno == ERANGE && 
(val < -1 || val > 1))) {
                                char *msg = sql_message("\b22003!double value 
too large or not a number (%s)", $1);
 
                                yyerror(m, msg);
@@ -4332,7 +4340,7 @@ literal:
 
                  errno = 0;
                  val = strtod($1,&p);
-                 if (p == $1 || (errno == ERANGE && (val < -1 || val > 1))) {
+                 if (p == $1 || val == dbl_nil || (errno == ERANGE && (val < 
-1 || val > 1))) {
                        char *msg = sql_message("\b22003!double value too large 
or not a number (%s)", $1);
 
                        yyerror(m, msg);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to