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

Reply via email to