OSDN Git Service

next.
[hmh/wiki.git] / lib.ml
diff --git a/lib.ml b/lib.ml
index 143ec11..7fbed08 100644 (file)
--- a/lib.ml
+++ b/lib.ml
@@ -74,7 +74,7 @@
        (let (iid wid date uid nwid)
                (sql "begin")
                (sql "select IID,WID,Date,UID from WikiIndex where PID=:pid and Page=:page"
-                       :bind (list ':pid PID ':page Page)
+                       :bind (list ':pid PID ':page page)
                        :answer '(iid wid date uid))
                (if (and        (not-emptyp wid)
                                        (> date (- (now) 10800))
        )
 )
 
+(defun wiki-delete (page)
+       (sql "begin")
+       (sql "insert into BackupIndex(PID,Page,UID,IP,Date,WID) select PID,Page,UID,IP,Date,WID from WikiIndex where PID=:pid and Page=:page"
+               :bind (list ':pid PID ':page page))
+       (sql "delete from WikiIndex where PID=:pid and Page=:page"
+               :bind (list ':pid PID ':page page))
+       (sql "end")
+)
+
 (defun wiki-page-index (cat vpage vtitle)
-       ($sqlite3 'database
-               (if (null cat)
-                               (progn
-                                       (sql "select a.Page,b.Title from WikiIndex a,Wiki b using(WID) where a.PID=:pid and a.Page not like 'special-%' order by a.Page"
-                                               :bind ':pid PID
-                                               :@answer (list vpage vtitle))
-                               )
-                       (if (emptyp cat)
-                                       (sql "select a.Page,b.Title from WikiIndex a,Wiki b using(WID) where a.PID=:pid and a.IID not in (select IID from WikiCategory where PID=:pid) and a.Page not like 'special-%' order by a.Page"
-                                               :bind (list ':pid PID)
-                                               :@answer (list vpage vtitle))
-                               (sql "select a.Page,b.Title from CategoryList c,WikiCategory d using(CID),WikiIndex a using(IID),Wiki b using(WID) where a.PID=:pid and c.CName=:cat and a.Page not like 'special-%'  order by a.Page"
-                                       :bind (list ':pid PID ':cat cat)
+       (if (null cat)
+                       (progn
+                               (sql "select a.Page,b.Title from WikiIndex a,Wiki b using(WID) where a.PID=:pid and a.Page not like 'special-%' order by a.Page"
+                                       :bind ':pid PID
                                        :@answer (list vpage vtitle))
                        )
+               (if (emptyp cat)
+                               (sql "select a.Page,b.Title from WikiIndex a,Wiki b using(WID) where a.PID=:pid and a.IID not in (select IID from WikiCategory where PID=:pid) and a.Page not like 'special-%' order by a.Page"
+                                       :bind (list ':pid PID)
+                                       :@answer (list vpage vtitle))
+                       (sql "select a.Page,b.Title from CategoryList c,WikiCategory d using(CID),WikiIndex a using(IID),Wiki b using(WID) where a.PID=:pid and c.CName=:cat and a.Page not like 'special-%'  order by a.Page"
+                               :bind (list ':pid PID ':cat cat)
+                               :@answer (list vpage vtitle))
                )
        )
 )
 
 (defun wiki-page-index-special (vpage vtitle)
-       ($sqlite3 'database
-               (sql "select a.Page,b.Title from WikiIndex a,Wiki b using(WID) where a.PID=:pid and a.Page like 'special-%' order by a.Page"
-                       :bind ':pid PID
-                       :@answer (list vpage vtitle))
-       )
+       (sql "select a.Page,b.Title from WikiIndex a,Wiki b using(WID) where a.PID=:pid and a.Page like 'special-%' order by a.Page"
+               :bind ':pid PID
+               :@answer (list vpage vtitle))
 )
 
 (defun wiki-category-index (vname)
-       ($sqlite3 'database
-               (sql "select CName from CategoryList where PID=:pid order by CName"
-                       :bind ':pid PID
-                       :@answer (list vname))
-       )
+       (sql "select CName from CategoryList where PID=:pid order by CName"
+               :bind ':pid PID
+               :@answer (list vname))
 )
 
 (defun wiki-add-category (name)
        (if (not-emptyp name)
-                       ($sqlite3 'database
-                               (sql "insert into CategoryList(PID,CName) values(:pid,:cat)"
-                                       :bind (list ':pid PID ':cat name))
-                       )
+                       (sql "insert into CategoryList(PID,CName) values(:pid,:cat)"
+                               :bind (list ':pid PID ':cat name))
+       )
+)
+
+(defun wiki-delete-category (name)
+       (sql "begin")
+       (sql "delete from WikiCategory where CID in (select CID from CategoryList where PID=:pid and CName=:cat)"
+               :bind ':pid PID ':cat cat)
+       (sql "delete from CategoryList where PID=:pid and CName=:cat"
+               :bind ':pid PID ':cat cat)
+       (sql "end")
+)
+
+(defun wiki-set-category (page vlist)
+       (let (iid)
+               (sql "begin")
+               (sql "select IID from WikiIndex where PID=:pid and Page=:page"
+                       :bind (list ':pid PID ':page page)
+                       :answer '(iid))
+               (if (not-emptyp iid)
+                               (progn  (sql "delete from WikiCategory where IID=:iid"
+                                                       :bind ':iid iid)
+                                               (doarray vlist
+                                                       (sql "insert into WikiCategory(PID,IID,CID) select :pid,:iid,CID from CategoryList where PID=:pid and CName=:name"
+                                                               :bind (list ':pid PID ':iid iid ':name vlist))
+                                               )
+                               )
+               )
+               (sql "end")
        )
 )