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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list