(defpackage #:clog-tools (:use #:cl #:clog) (:export clog-db-admin)) (in-package :clog-tools) (defclass app-data () ((body :accessor body :documentation "Top level access to browser window") (db-connection :accessor db-connection :initform nil :documentation "Access to database connection"))) (defun on-db-open (obj) (let* ((app (connection-data-item obj "app-data")) (win (create-gui-window obj :title "Open Database" :content "
" :width 400 :height 450))) (window-center win) (set-on-click (attach-as-child obj "odb-open") (lambda (obj) (format t "open db : ~A" (name-value obj "db-name")) (setf (db-connection app) (dbi:connect :sqlite3 :database-name (name-value obj "db-name"))) (setf (title (html-document (body app))) (format nil "CLOG DB Admin - ~A" (name-value obj "db-name"))) (window-close win))) (set-on-click (attach-as-child obj "odb-cancel") (lambda (obj) (window-close win))))) (defun on-db-close (obj) (let ((app (connection-data-item obj "app-data"))) (when (db-connection app) (dbi:disconnect (db-connection app))) (print "db disconnected") (setf (title (html-document (body app))) "CLOG DB Admin"))) (defun on-query-results (obj) (let ((app (connection-data-item obj "app-data")) (win (create-gui-window obj :title "Enter query:" :content "" :width 400 :height 200))) (window-center win) (set-on-click (attach-as-child obj "odb-open") (lambda (obj) (format t "open query : ~A~%~%" (name-value obj "db-query")) (print (dbi:fetch-all (dbi:execute (dbi:prepare (db-connection app) (name-value obj "db-query")) ()))) ;; (let* ((query (dbi:prepare (db-connection app) (name-value obj "db-query"))) ;; (query (dbi:execute query))) ;; (loop for row = (dbi:fetch query) ;; while row ;; do (format t "~A~%" row))) (window-close win))) (set-on-click (attach-as-child obj "odb-cancel") (lambda (obj) (window-close win))))) (defun on-help-about (obj) (let ((about (create-gui-window obj :title "About" :content "