Changeset: d225b549a453 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d225b549a453
Modified Files:
        monetdb5/mal/mal_http_daemon.c
        sql/backends/monet5/rest/rest_jsonstore_handle_get.c
Branch: default
Log Message:

start implementing document updates and small improvements after testing


diffs (123 lines):

diff --git a/monetdb5/mal/mal_http_daemon.c b/monetdb5/mal/mal_http_daemon.c
--- a/monetdb5/mal/mal_http_daemon.c
+++ b/monetdb5/mal/mal_http_daemon.c
@@ -36,7 +36,7 @@ static int volatile hdrunning;
 struct MHD_Daemon *http_daemon;
 #define PORT 8998
 #define POSTBUFFERSIZE  512
-#define MAXNAMESIZE     20
+#define MAXNAMESIZE     512
 #define MAXANSWERSIZE   512
 
 #define GET             0
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
@@ -61,6 +61,7 @@ RESTsqlQuery(char **result, char * query
        msg = SQLinitClient(c);
        MSinitClientPrg(c, "user", "main");
        (void) MCinitClientThread(c);
+       // TODO: check that be <> NULL
        be = (backend*)c->sqlcontext;
        be->output_format = OFMT_JSON;
 
@@ -130,11 +131,48 @@ str RESTcreateDB(char ** result, char * 
                "_id uuid,                     "
                "mimetype varchar(128),        "
                "filename varchar(128),        "
-               "value blob);                  ";
+               "value blob);                  ";
+
        size_t len = 3 * strlen(dbname) + (12 * line) - (3 * place) + char0;
+       querytext = malloc(len);
+       snprintf(querytext, len, query, dbname, dbname, dbname);
+
+       msg = RESTsqlQuery(result, querytext);
+       if (querytext != NULL) {
+               free(querytext);
+       }
+
+       query = 
+               "CREATE FUNCTION %s_UPDATE_DOC "
+               "( doc_id VARCHAR(36),         "
+               "  doc json )                  "
+               "RETURNS VARCHAR(100)          "
+               "BEGIN                         "
+               "  DECLARE ISNEW INTEGER;      "
+               "  DECLARE VERSION INTEGER;    "
+               "  SET ISNEW = (SELECT         "
+               "    COUNT(*) FROM json_%s     "
+               "    WHERE _id = doc_id);      "
+               "  IF (ISNEW = 0) THEN         "
+               "    INSERT INTO json_%s (     "
+               "      _id, _rev, js )         "
+               "    VALUES ( doc_id,          "
+               "      CONCAT('1-', md5(doc)), "
+               "        doc );                "
+               "  ELSE                        "
+               "    INSERT INTO json_%s (     "
+               "      _id, _rev, js )         "
+               "    VALUES ( doc_id,          "
+               "      CONCAT('2-', md5(doc)), "
+               "        doc );                "
+               "  END IF;                    "
+               "    RETURN                    "
+               "      SELECT 'TRUE' as ok;    "
+               "END;                          ";
+       len = 4 * strlen(dbname) + (26 * line) - (4 * place) + char0;
 
        querytext = malloc(len);
-       snprintf(querytext, len, query, dbname, dbname, dbname);
+       snprintf(querytext, len, query, dbname, dbname, dbname, dbname);
 
        msg = RESTsqlQuery(result, querytext);
        if (querytext != NULL) {
@@ -151,12 +189,14 @@ str RESTdeleteDB(char ** result, char * 
        str msg = MAL_SUCCEED;
        char * querytext = NULL;
        char * query =
+               "DROP FUNCTION %s_UPDATE_DOC;  "
                "DROP TABLE json_%s;           "
-               "DROP TABLE jsonblob_%s;       ";
-       int len = 2 * strlen(dbname) + (2 * line) - (2 * place) + char0;
+               "DROP TABLE jsonblob_%s;       "
+               "DROP TABLE jsondesign_%s;     ";
+       int len = 4 * strlen(dbname) + (4 * line) - (4 * place) + char0;
 
        querytext = malloc(len);
-       snprintf(querytext, len, query, dbname, dbname);
+       snprintf(querytext, len, query, dbname, dbname, dbname);
 
        msg = RESTsqlQuery(result, querytext);
        if (querytext != NULL) {
@@ -223,19 +263,16 @@ str RESTgetDoc(char ** result, char * db
 str RESTupdateDoc(char ** result, char * dbname, const char * doc, const char 
* doc_id)
 {
        str msg = MAL_SUCCEED;
-       size_t len = strlen(doc_id) + strlen(dbname) + 2 * strlen(doc) + 74;
+       size_t len = strlen(dbname) + strlen(doc) + strlen(doc_id) + 28 + char0;
        char * querytext = NULL;
 
        querytext = malloc(len);
-       snprintf(querytext, len, "INSERT INTO json_%s (_id, _rev, js) VALUES 
('%s', concat('2-', md5('%s')), '%s');", dbname, doc_id, doc, doc);
+       snprintf(querytext, len, "SELECT %s_update_doc ('%s', '%s');", dbname, 
doc_id, doc);
 
        msg = RESTsqlQuery(result, querytext);
        if (querytext != NULL) {
                free(querytext);
        }
-       if (strcmp(*result,"&2 1 -1\n") == 0) {
-         msg = RESTsqlQuery(result, result_ok);
-       }
        return msg;
 }
 
@@ -252,7 +289,7 @@ str RESTdeleteDoc(char ** result, char *
        if (querytext != NULL) {
                free(querytext);
        }
-       if (strcmp(*result,"&2 3 -1\n") == 0) {
+       if (strcmp(*result,"&2 1 -1\n") == 0) {
          msg = RESTsqlQuery(result, result_ok);
        }
        return msg;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to