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