Changeset: 063634c9435b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=063634c9435b
Added Files:
monetdb5/modules/atoms/Tests/json05.mal
monetdb5/modules/atoms/Tests/json05.stable.err
monetdb5/modules/atoms/Tests/json05.stable.out
Modified Files:
monetdb5/modules/atoms/Tests/All
monetdb5/modules/atoms/Tests/json02.mal
monetdb5/modules/atoms/Tests/json02.stable.out
monetdb5/modules/atoms/json_atom.c
monetdb5/modules/atoms/json_atom.h
monetdb5/modules/atoms/json_atom.mal
Branch: default
Log Message:
A simple JSON path extractor
diffs (truncated from 533 to 300 lines):
diff --git a/monetdb5/modules/atoms/Tests/All b/monetdb5/modules/atoms/Tests/All
--- a/monetdb5/modules/atoms/Tests/All
+++ b/monetdb5/modules/atoms/Tests/All
@@ -20,4 +20,5 @@ json01
json02
json03
json04
+json05
jsonrender
diff --git a/monetdb5/modules/atoms/Tests/json02.mal
b/monetdb5/modules/atoms/Tests/json02.mal
--- a/monetdb5/modules/atoms/Tests/json02.mal
+++ b/monetdb5/modules/atoms/Tests/json02.mal
@@ -2,53 +2,53 @@
b:= json.new("{\"f1\":1}");
f:= json.names(b);
io.print(f);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
b:= json.new("{\"f1\":1,\"f2\":2}");
f:= json.names(b);
io.print(f);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
b:= json.new("{\"f1\":1,\"f2\":2,\"f1\":3}");
f:= json.names(b);
io.print(f);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
b:= json.new("{\"f1\":{\"f12\":3},\"f2\":[2,3,4]}");
f:= json.names(b);
io.print(f);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
i:= json.length(b);
io.print(i);
b:= json.new("[]");
z:= json.isvalidarray(b);
io.print(z);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
i:= json.length(b);
io.print(i);
b:= json.new("[1,\"f2\", 2]");
z:= json.isvalidarray(b);
io.print(z);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
b:= json.new("[1,2,null,true,false ]");
z:= json.isvalidarray(b);
io.print(z);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
i:= json.length(b);
io.print(i);
b:= json.new("[\"\\/\" , 2 ]");
z:= json.isvalidarray(b);
io.print(z);
-f:= json.values(b);
-io.print(f);
+ff:= json.values(b);
+io.print(ff);
diff --git a/monetdb5/modules/atoms/Tests/json02.stable.out
b/monetdb5/modules/atoms/Tests/json02.stable.out
--- a/monetdb5/modules/atoms/Tests/json02.stable.out
+++ b/monetdb5/modules/atoms/Tests/json02.stable.out
@@ -23,49 +23,49 @@ function user.main():void;
b := json.new("{\"f1\":1}");
f := json.names(b);
io.print(f);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
b := json.new("{\"f1\":1,\"f2\":2}");
f := json.names(b);
io.print(f);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
b := json.new("{\"f1\":1,\"f2\":2,\"f1\":3}");
f := json.names(b);
io.print(f);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
b := json.new("{\"f1\":{\"f12\":3},\"f2\":[2,3,4]}");
f := json.names(b);
io.print(f);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
i := json.length(b);
io.print(i);
b := json.new("[]");
z := json.isvalidarray(b);
io.print(z);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
i := json.length(b);
io.print(i);
b := json.new("[1,\"f2\", 2]");
z := json.isvalidarray(b);
io.print(z);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
b := json.new("[1,2,null,true,false ]");
z := json.isvalidarray(b);
io.print(z);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
i := json.length(b);
io.print(i);
b := json.new("[\"\\/\" , 2 ]");
z := json.isvalidarray(b);
io.print(z);
- f := json.values(b);
- io.print(f);
+ ff := json.values(b);
+ io.print(ff);
end main;
#-----------------#
# h t # name
diff --git a/monetdb5/modules/atoms/Tests/json05.mal
b/monetdb5/modules/atoms/Tests/json05.mal
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/Tests/json05.mal
@@ -0,0 +1,43 @@
+js:= calc.json("[{\"book\":{ \"category\": \"reference\", \"author\": \"Nigel
Rees\", \"title\": \"Sayings of the Century\", \"price\": 8.95 }, \"book\":{
\"category\": \"fiction\", \"author\": \"Evelyn Waugh\", \"title\": \"Sword of
Honour\", \"price\": 12.99 }, \"book\":{ \"category\": \"fiction\", \"author\":
\"Herman Melville\", \"title\": \"Moby Dick\", \"isbn\": \"0-553-21311-3\",
\"price\": 8.99 }, \"book\":{ \"category\": \"fiction\", \"author\": \"J. R. R.
Tolkien\", \"title\": \"The Lord of the Rings\", \"isbn\": \"0-395-19395-8\",
\"price\": 22.99 }, \"pencil\":{ \"color\": \"red\", \"price\": 19.95 }}]");
+
+io.print(js);
+
+p:= json.path(js,".book");
+io.print(p);
+p:= json.path(js,".pencil");
+io.print(p);
+p:= json.path(js,"pencil");
+io.print(p);
+p:= json.path(js,"..author");
+io.print(p);
+p:= json.path(js,"..category");
+io.print(p);
+
+p:= json.path(js,".book[0]");
+io.print(p);
+p:= json.path(js,".book[1]");
+io.print(p);
+p:= json.path(js,".book[2]");
+io.print(p);
+p:= json.path(js,".book[3]");
+io.print(p);
+p:= json.path(js,".book.category");
+io.print(p);
+
+js := calc.json("[[{\"name\":\"john\"}], {\"name\":\"mary\"}]");
+p := json.path(js,"..name");
+io.print(p);
+p := json.path(js,".name");
+io.print(p);
+
+#empty lists
+p:= json.path(js,".book[-1]");
+io.print(p);
+p:= json.path(js,".book[4]");
+io.print(p);
+p:= json.path(js,"$$$");
+io.print(p);
+p:= json.path(js,"...");
+io.print(p);
+p:= json.path(js,"[[2]]");
+io.print(p);
diff --git a/monetdb5/modules/atoms/Tests/json05.stable.err
b/monetdb5/modules/atoms/Tests/json05.stable.err
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/Tests/json05.stable.err
@@ -0,0 +1,29 @@
+stderr of test 'json05` in directory 'monetdb5/modules/atoms` itself:
+
+
+# 19:57:09 >
+# 19:57:09 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=35138" "--set"
"mapi_usock=/var/tmp/mtest-2321/.s.monetdb.35138" "--set" "monet_prompt="
"--forcemito" "--set" "mal_listing=2"
"--dbpath=/export/scratch1/mk/current//Linux/var/MonetDB/mTests_monetdb5_modules_atoms"
"json05.mal"
+# 19:57:09 >
+
+# builtin opt gdk_dbpath =
/export/scratch1/mk/current//Linux/var/monetdb5/dbfarm/demo
+# builtin opt gdk_debug = 0
+# builtin opt gdk_vmtrim = yes
+# builtin opt monet_prompt = >
+# builtin opt monet_daemon = no
+# builtin opt mapi_port = 50000
+# builtin opt mapi_open = false
+# builtin opt mapi_autosense = false
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 35138
+# cmdline opt mapi_usock = /var/tmp/mtest-2321/.s.monetdb.35138
+# cmdline opt monet_prompt =
+# cmdline opt mal_listing = 2
+# cmdline opt gdk_dbpath =
/export/scratch1/mk/current//Linux/var/MonetDB/mTests_monetdb5_modules_atoms
+
+# 19:57:09 >
+# 19:57:09 > "Done."
+# 19:57:09 >
+
diff --git a/monetdb5/modules/atoms/Tests/json05.stable.out
b/monetdb5/modules/atoms/Tests/json05.stable.out
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/Tests/json05.stable.out
@@ -0,0 +1,83 @@
+stdout of test 'json05` in directory 'monetdb5/modules/atoms` itself:
+
+
+# 19:57:09 >
+# 19:57:09 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=35138" "--set"
"mapi_usock=/var/tmp/mtest-2321/.s.monetdb.35138" "--set" "monet_prompt="
"--forcemito" "--set" "mal_listing=2"
"--dbpath=/export/scratch1/mk/current//Linux/var/MonetDB/mTests_monetdb5_modules_atoms"
"json05.mal"
+# 19:57:09 >
+
+# MonetDB 5 server v11.16.0
+# This is an unreleased version
+# Serving database 'mTests_monetdb5_modules_atoms', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically
linked
+# Found 15.629 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2013 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://vienna.ins.cwi.nl:35138/
+# Listening for UNIX domain connection requests on
mapi:monetdb:///var/tmp/mtest-2321/.s.monetdb.35138
+# MonetDB/GIS module loaded
+# MonetDB/JAQL module loaded
+# MonetDB/SQL module loaded
+function user.main():void;
+ js := calc.json("[{\"book\":{ \"category\": \"reference\", \"author\":
\"Nigel Rees\", \"title\": \"Sayings of the Century\", \"price\": 8.95 },
\"book\":{ \"category\": \"fiction\", \"author\": \"Evelyn Waugh\", \"title\":
\"Sword of Honour\", \"price\": 12.99 }, \"book\":{ \"category\": \"fiction\",
\"author\": \"Herman Melville\", \"title\": \"Moby Dick\", \"isbn\":
\"0-553-21311-3\", \"price\": 8.99 }, \"book\":{ \"category\": \"fiction\",
\"author\": \"J. R. R. Tolkien\", \"title\": \"The Lord of the Rings\",
\"isbn\": \"0-395-19395-8\", \"price\": 22.99 }, \"pencil\":{ \"color\":
\"red\", \"price\": 19.95 }}]");
+ io.print(js);
+ p := json.path(js,".book");
+ io.print(p);
+ p := json.path(js,".pencil");
+ io.print(p);
+ p := json.path(js,"pencil");
+ io.print(p);
+ p := json.path(js,"..author");
+ io.print(p);
+ p := json.path(js,"..category");
+ io.print(p);
+ p := json.path(js,".book[0]");
+ io.print(p);
+ p := json.path(js,".book[1]");
+ io.print(p);
+ p := json.path(js,".book[2]");
+ io.print(p);
+ p := json.path(js,".book[3]");
+ io.print(p);
+ p := json.path(js,".book.category");
+ io.print(p);
+ js := calc.json("[[{\"name\":\"john\"}], {\"name\":\"mary\"}]");
+ p := json.path(js,"..name");
+ io.print(p);
+ p := json.path(js,".name");
+ io.print(p);
+#empty lists
+ p := json.path(js,".book[-1]");
+ io.print(p);
+ p := json.path(js,".book[4]");
+ io.print(p);
+ p := json.path(js,"$$$");
+ io.print(p);
+ p := json.path(js,"...");
+ io.print(p);
+ p := json.path(js,"[[2]]");
+ io.print(p);
+end main;
+[ "[{\"book\":{ \"category\": \"reference\", \"author\": \"Nigel Rees\",
\"title\": \"Sayings of the Century\", \"price\": 8.95 }, \"book\":{
\"category\": \"fiction\", \"author\": \"Evelyn Waugh\", \"title\": \"Sword of
Honour\", \"price\": 12.99 }, \"book\":{ \"category\": \"fiction\", \"author\":
\"Herman Melville\", \"title\": \"Moby Dick\", \"isbn\": \"0-553-21311-3\",
\"price\": 8.99 }, \"book\":{ \"category\": \"fiction\", \"author\": \"J. R. R.
Tolkien\", \"title\": \"The Lord of the Rings\", \"isbn\": \"0-395-19395-8\",
\"price\": 22.99 }, \"pencil\":{ \"color\": \"red\", \"price\": 19.95 }}]" ]
+[ "[{ \"category\": \"reference\", \"author\": \"Nigel Rees\", \"title\":
\"Sayings of the Century\", \"price\": 8.95 },{ \"category\": \"fiction\",
\"author\": \"Evelyn Waugh\", \"title\": \"Sword of Honour\", \"price\": 12.99
},{ \"category\": \"fiction\", \"author\": \"Herman Melville\", \"title\":
\"Moby Dick\", \"isbn\": \"0-553-21311-3\", \"price\": 8.99 },{ \"category\":
\"fiction\", \"author\": \"J. R. R. Tolkien\", \"title\": \"The Lord of the
Rings\", \"isbn\": \"0-395-19395-8\", \"price\": 22.99 }]" ]
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list