Changeset: 24b2d09a3680 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=24b2d09a3680 Modified Files: monetdb5/extras/jaql/Tests/json05.stable.out monetdb5/extras/jaql/json.c monetdb5/extras/jaql/json.mal Branch: Jul2012 Log Message:
unwrap: don't write null as nil We're unwrapping to a given type, so we need to cast to that type. Returing nil is alien to JSON/JAQL, so don't do that, pick the (hopefully) most sensical value instead. diffs (93 lines): diff --git a/monetdb5/extras/jaql/Tests/json05.stable.out b/monetdb5/extras/jaql/Tests/json05.stable.out --- a/monetdb5/extras/jaql/Tests/json05.stable.out +++ b/monetdb5/extras/jaql/Tests/json05.stable.out @@ -51,7 +51,7 @@ end main; [ 0@0, 0 ] [ 0@0, 1 ] [ 0@0, 2 ] -[ 0@0, nil ] +[ 0@0, 0 ] [ 0@0, 4 ] [ "dbl" ] #---------------------------------# @@ -61,7 +61,7 @@ end main; [ 0@0, 1 ] [ 0@0, 1 ] [ 0@0, 2.2999999999999998 ] -[ 0@0, nil ] +[ 0@0, inf ] [ 0@0, 4 ] [ "str" ] #---------------------------------# @@ -70,7 +70,7 @@ end main; #---------------------------------# [ 0@0, "long('1')" ] [ 0@0, "double('2.300000')" ] -[ 0@0, nil ] +[ 0@0, "(null)" ] [ 0@0, "long('4')" ] [ 0@0, "4" ] [ 0@0, "bool('true')" ] diff --git a/monetdb5/extras/jaql/json.c b/monetdb5/extras/jaql/json.c --- a/monetdb5/extras/jaql/json.c +++ b/monetdb5/extras/jaql/json.c @@ -1420,13 +1420,16 @@ JSONunwrap(Client cntxt, MalBlkPtr mb, M BUNins(r, &v, buf, FALSE); break; case 'n': - BUNins(r, &v, (ptr)str_nil, FALSE); + snprintf(buf, sizeof(buf), "(null)"); + BUNins(r, &v, buf, FALSE); break; default: /* JSON piece (object/array), serialise */ (void)s; /* TODO: implement right call */; - BUNins(r, &v, (ptr)str_nil, FALSE); + snprintf(buf, sizeof(buf), + "FIXME: not yet implemented"); + BUNins(r, &v, buf, FALSE); break; } } @@ -1460,7 +1463,7 @@ JSONunwrap(Client cntxt, MalBlkPtr mb, M break; case 'n': default: - d = dbl_nil; + d = 0.1 / 0.0; BUNins(r, &v, &d, FALSE); break; } @@ -1495,13 +1498,18 @@ JSONunwrap(Client cntxt, MalBlkPtr mb, M break; case 'n': default: - l = lng_nil; + l = 0; BUNins(r, &v, &l, FALSE); break; } } break; } + if (BATcount(b) == 0) { + r = BATnew(TYPE_oid, TYPE_lng, 1); + l = lng_nil; + BUNins(r, &v, &l, FALSE); + } } } diff --git a/monetdb5/extras/jaql/json.mal b/monetdb5/extras/jaql/json.mal --- a/monetdb5/extras/jaql/json.mal +++ b/monetdb5/extras/jaql/json.mal @@ -61,7 +61,7 @@ pattern unwraptype(kind:bat[:oid,:bte],s address JSONunwrap comment "Retrieve the type necessary to unwrap the given JSON array to"; -pattern unwrap(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],arrid:oid,tpe:any_1)(:bat[:oid,:any_1]) +pattern unwrap(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],arrid:oid,tpe:any_1):bat[:oid,:any_1] address JSONunwrap comment "Return the JSON array with oid arrid elements as BAT with tail type tpe performing the necessary casts"; _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list