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

Reply via email to