Changeset: 838fc83bb970 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=838fc83bb970
Added Files:
sql/scripts/41_jsonstore.sql
Modified Files:
sql/backends/monet5/rest/rest_jsonstore.c
sql/backends/monet5/rest/rest_jsonstore_handle_get.c
sql/backends/monet5/rest/rest_jsonstore_handle_get.h
sql/scripts/Makefile.ag
Branch: default
Log Message:
implement new rest functions
diffs (151 lines):
diff --git a/sql/backends/monet5/rest/rest_jsonstore.c
b/sql/backends/monet5/rest/rest_jsonstore.c
--- a/sql/backends/monet5/rest/rest_jsonstore.c
+++ b/sql/backends/monet5/rest/rest_jsonstore.c
@@ -56,7 +56,7 @@ mserver_browser_get(const UriUriA uri) {
if (uri.absolutePath) {
if (uri.pathHead != NULL) {
if (uri.pathHead->next == NULL) {
- if (strcmp(uri.pathHead->text.first,
API_SPECIAL_CHAR) > 0) {
+ if (strncmp(uri.pathHead->text.first,
API_SPECIAL_CHAR, 1) == 0) {
// This path element is on of the
special cases
mserver_rest_command =
MONETDB_REST_UNKWOWN_SPECIAL;
if (strcmp(uri.pathHead->text.first,
MONETDB_REST_PATH_ALLDBS) == 0) {
@@ -74,7 +74,7 @@ mserver_browser_get(const UriUriA uri) {
}
} else {
// We have multiple paths
- if (strcmp(uri.pathHead->text.first,
API_SPECIAL_CHAR) > 0) {
+ if (strncmp(uri.pathHead->text.first,
API_SPECIAL_CHAR, 1) == 0) {
// This path element is on of the
special cases
mserver_rest_command =
MONETDB_REST_UNKWOWN_SPECIAL;
if (strcmp(uri.pathHead->text.first,
MONETDB_REST_PATH_ALLDBS) == 0) {
@@ -89,7 +89,7 @@ mserver_browser_get(const UriUriA uri) {
// The first path element is a table
name
// we cannot check this here, so we
assume the table exists
fprintf(stderr, "url: %s\n",
uri.pathHead->text.first);
- if (strcmp(uri.pathTail->text.first,
API_SPECIAL_CHAR) > 0) {
+ if (strncmp(uri.pathTail->text.first,
API_SPECIAL_CHAR, 1) == 0) {
// This path element is on of
the special cases
mserver_rest_command =
MONETDB_REST_UNKWOWN_SPECIAL;
if
(strcmp(uri.pathTail->text.first, MONETDB_REST_PATH_ALLDBS) == 0) {
@@ -256,6 +256,10 @@ handle_http_request (const char *url, co
dbname = get_dbname(uri);
RESTcreateDoc(page, dbname, postdata);
break;
+ case MONETDB_REST_DB_INFO:
+ dbname = get_dbname(uri);
+ RESTdbInfo(page, dbname);
+ break;
default:
// error, unknown command
ret = 1;
diff --git a/sql/backends/monet5/rest/rest_jsonstore_handle_get.c
b/sql/backends/monet5/rest/rest_jsonstore_handle_get.c
--- a/sql/backends/monet5/rest/rest_jsonstore_handle_get.c
+++ b/sql/backends/monet5/rest/rest_jsonstore_handle_get.c
@@ -101,11 +101,11 @@ str RESTuuid(char **result)
str RESTcreateDB(char ** result, char * dbname)
{
str msg = MAL_SUCCEED;
- int len = strlen(dbname) + 45;
+ int len = strlen(dbname) + 58;
char * querytext = NULL;
querytext = malloc(len);
- snprintf(querytext, len, "CREATE TABLE json_%s (u uuid, r int, js
json);", dbname);
+ snprintf(querytext, len, "CREATE TABLE json_%s (_id uuid, _rev
VARCHAR(34), js json);", dbname);
msg = RESTsqlQuery(result, querytext);
if (querytext != NULL) {
@@ -139,18 +139,34 @@ str RESTdeleteDB(char ** result, char *
str RESTcreateDoc(char ** result, char * dbname, const char * doc)
{
str msg = MAL_SUCCEED;
- int len = strlen(dbname) + strlen(doc)+ 52;
+ int len = strlen(dbname) + 32 + strlen(doc)+ 72;
char * querytext = NULL;
querytext = malloc(len);
- snprintf(querytext, len, "INSERT INTO json_%s (u, r, js) VALUES
(uuid(), 1, '%s');", dbname, doc);
+ snprintf(querytext, len, "INSERT INTO json_%s (_id, _rev, js) VALUES
(uuid(), concat('1-', md5('%s')), '%s');", dbname, doc, doc);
msg = RESTsqlQuery(result, querytext);
if (querytext != NULL) {
free(querytext);
}
- if (strcmp(*result,"") == 0) {
+ if (strcmp(*result,"&2 1 -1\n") == 0) {
msg = RESTsqlQuery(result, result_ok);
}
return msg;
}
+
+str RESTdbInfo(char **result, char * dbname)
+{
+ str msg = MAL_SUCCEED;
+ int len = strlen(dbname) + 21;
+ char * querytext = NULL;
+
+ querytext = malloc(len);
+ snprintf(querytext, len, "SELECT * FROM json_%s;", dbname);
+
+ msg = RESTsqlQuery(result, querytext);
+ if (querytext != NULL) {
+ free(querytext);
+ }
+ return msg;
+}
diff --git a/sql/backends/monet5/rest/rest_jsonstore_handle_get.h
b/sql/backends/monet5/rest/rest_jsonstore_handle_get.h
--- a/sql/backends/monet5/rest/rest_jsonstore_handle_get.h
+++ b/sql/backends/monet5/rest/rest_jsonstore_handle_get.h
@@ -36,8 +36,9 @@
rest_export str RESTwelcome(char **result);
rest_export str RESTuuid(char **result);
rest_export str RESTallDBs(char **result);
-rest_export str RESTcreateDB(char **result, char * dbName);
-rest_export str RESTdeleteDB(char **result, char * dbName);
-rest_export str RESTcreateDoc(char **result, char * dbName, const char * doc);
+rest_export str RESTcreateDB(char **result, char * dbname);
+rest_export str RESTdeleteDB(char **result, char * dbname);
+rest_export str RESTcreateDoc(char **result, char * dbname, const char * doc);
+rest_export str RESTdbInfo(char **result, char * dbname);
#endif
diff --git a/sql/scripts/41_jsonstore.sql b/sql/scripts/41_jsonstore.sql
new file mode 100644
--- /dev/null
+++ b/sql/scripts/41_jsonstore.sql
@@ -0,0 +1,22 @@
+
+-- The contents of this file are subject to the MonetDB Public License
+-- Version 1.1 (the "License"); you may not use this file except in
+-- compliance with the License. You may obtain a copy of the License at
+-- http://www.monetdb.org/Legal/MonetDBLicense
+--
+-- Software distributed under the License is distributed on an "AS IS"
+-- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-- License for the specific language governing rights and limitations
+-- under the License.
+--
+-- The Original Code is the MonetDB Database System.
+--
+-- The Initial Developer of the Original Code is CWI.
+-- Copyright August 2008-2013 MonetDB B.V.
+-- All Rights Reserved.
+
+-- (co) Arjen de Rijke
+-- Functions supporting jsonstore
+
+create function sys.md5(v string)
+returns string external name clients.md5sum;
diff --git a/sql/scripts/Makefile.ag b/sql/scripts/Makefile.ag
--- a/sql/scripts/Makefile.ag
+++ b/sql/scripts/Makefile.ag
@@ -20,7 +20,7 @@ MT_SAFE
headers_sql = {
HEADERS = sql
DIR = libdir/monetdb5/createdb
- SOURCES = 09_like.sql 10_math.sql 11_times.sql 12_url.sql 13_date.sql
14_inet.sql 15_querylog.sql 16_tracelog.sql 17_compress.sql 18_dictionary.sql
19_cluster.sql 20_vacuum.sql 21_dependency_functions.sql 22_clients.sql
23_skyserver.sql 24_zorder.sql 25_debug.sql 26_sysmon.sql 39_analytics.sql
40_json.sql 45_uuid.sql 75_storagemodel.sql 99_system.sql
+ SOURCES = 09_like.sql 10_math.sql 11_times.sql 12_url.sql 13_date.sql
14_inet.sql 15_querylog.sql 16_tracelog.sql 17_compress.sql 18_dictionary.sql
19_cluster.sql 20_vacuum.sql 21_dependency_functions.sql 22_clients.sql
23_skyserver.sql 24_zorder.sql 25_debug.sql 26_sysmon.sql 39_analytics.sql
40_json.sql 41_jsonstore.sql 45_uuid.sql 75_storagemodel.sql 99_system.sql
}
headers_moresql = {
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list