src/server/plugins/postgresql/webdav.c

branch
webdav
changeset 317
09676b559091
parent 315
b608b7aa43a6
child 318
60870dbac94f
--- a/src/server/plugins/postgresql/webdav.c	Tue Apr 26 15:19:12 2022 +0200
+++ b/src/server/plugins/postgresql/webdav.c	Tue Apr 26 18:21:25 2022 +0200
@@ -66,8 +66,11 @@
     r.lastmodified,\n\
     r.creationdate,\n\
     r.contentlength,\n\
+    p.prefix,\n\
     p.xmlns,\n\
     p.pname,\n\
+    p.lang,\n\
+    p.nsdeflist,\n\
     p.pvalue\n\
 from Resource r\n\
 left join Property p on r.resource_id = p.resource_id\n\
@@ -85,8 +88,11 @@
     r.lastmodified,\n\
     r.creationdate,\n\
     r.contentlength,\n\
+    p.prefix,\n\
     p.xmlns,\n\
     p.pname,\n\
+    p.lang,\n\
+    p.nsdeflist,\n\
     p.pvalue\n\
 from Resource r\n\
 left join (\n\
@@ -110,8 +116,11 @@
     r.lastmodified,\n\
     r.creationdate,\n\
     r.contentlength,\n\
+    p.prefix,\n\
     p.xmlns,\n\
     p.pname,\n\
+    p.lang,\n\
+    p.nsdeflist,\n\
     p.pvalue\n\
 from Resource r\n\
 left join Property p on r.resource_id = p.resource_id\n\
@@ -133,8 +142,11 @@
     r.lastmodified,\n\
     r.creationdate,\n\
     r.contentlength,\n\
+    p.prefix,\n\
     p.xmlns,\n\
     p.pname,\n\
+    p.lang,\n\
+    p.nsdeflist,\n\
     p.pvalue\n\
 from Resource r\n\
 left join (\n\
@@ -172,8 +184,11 @@
     r.lastmodified,\n\
     r.creationdate,\n\
     r.contentlength,\n\
+    p.prefix,\n\
     p.xmlns,\n\
     p.pname,\n\
+    p.lang,\n\
+    p.nsdeflist,\n\
     p.pvalue\n\
     from resolvepath r\n\
 left join Property p on r.resource_id = p.resource_id\n\
@@ -208,8 +223,11 @@
     r.lastmodified,\n\
     r.creationdate,\n\
     r.contentlength,\n\
+    p.prefix,\n\
     p.xmlns,\n\
     p.pname,\n\
+    p.lang,\n\
+    p.nsdeflist,\n\
     p.pvalue\n\
 from resolvepath r\n\
 left join (\n\
@@ -446,9 +464,12 @@
         //  5: lastmodified
         //  6: creationdate
         //  7: contentlength
-        //  8: property xmlns
-        //  9: property name
-        // 10: property value
+        //  8: property prefix
+        //  9: property xmlns
+        // 10: property name
+        // 11: property lang
+        // 12: property nsdeflist
+        // 13: property value
         
         char *path = PQgetvalue(result, r, 0);
         char *res_id = PQgetvalue(result, r, 1);
@@ -517,9 +538,17 @@
         
         // dead properties
         if(!PQgetisnull(result, r, 9)) {
-            char *xmlns = PQgetvalue(result, r, 8);
-            char *pname = PQgetvalue(result, r, 9);
-            char *pvalue = PQgetvalue(result, r, 10);
+            char *prefix = PQgetvalue(result, r, 8);
+            char *xmlns = PQgetvalue(result, r, 9);
+            char *pname = PQgetvalue(result, r, 10);
+            char *lang = PQgetvalue(result, r, 11);
+            char *nsdef = PQgetvalue(result, r, 12);
+            char *pvalue = PQgetvalue(result, r, 13);
+            
+            int pvalue_len = PQgetlength(result, r, 13);
+            WSBool lang_isnull = PQgetisnull(result, r, 11);
+            WSBool nsdef_isnull = PQgetisnull(result, r, 12);
+            WSBool pvalue_isnull = PQgetisnull(result, r, 13);
             
             WebdavProperty *property = pool_malloc(pool, sizeof(WebdavProperty));
             property->lang = NULL;
@@ -528,12 +557,26 @@
             xmlNs *namespace = pool_malloc(pool, sizeof(xmlNs));
             memset(namespace, 0, sizeof(struct _xmlNs));
             namespace->href = (xmlChar*)pool_strdup(pool, xmlns);
-            namespace->prefix = (xmlChar*)"zx1"; // TODO
+            namespace->prefix = (xmlChar*)pool_strdup(pool, prefix);
             property->namespace = namespace;
             
-            property->vtype = WS_VALUE_TEXT;
-            property->value.text.str = pool_strdup(pool, pvalue);
-            property->value.text.length = strlen(pvalue);
+            if(!lang_isnull) {
+                property->lang = (xmlChar*)pool_strdup(pool, lang);
+            }
+            
+            if(!pvalue_isnull) {
+                char *content = pool_malloc(pool, pvalue_len+1);
+                memcpy(content, pvalue, pvalue_len);
+                content[pvalue_len] = '\0';
+                
+                if(nsdef_isnull) {
+                    property->vtype = WS_VALUE_TEXT;
+                    property->value.text.str = content;
+                    property->value.text.length = pvalue_len;
+                } else {
+                    // TODO
+                }
+            }
             
             resource->addproperty(resource, property, 200);
         }

mercurial