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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list