|
|
@@ -7,42 +7,42 @@
|
|
|
(asdf:component-pathname
|
|
|
(asdf:find-system '#:chatikbot))))
|
|
|
|
|
|
+(defvar *current-db* nil "Currently opened database")
|
|
|
(defmacro with-db ((db) &body body)
|
|
|
- `(sqlite:with-open-database (,db (db-path) :busy-timeout 30)
|
|
|
- (sqlite:execute-non-query ,db "PRAGMA foreign_keys = ON")
|
|
|
- ,@body))
|
|
|
-
|
|
|
-(defun %db-execute (db sql &rest parameters)
|
|
|
- (apply #'sqlite:execute-non-query db sql parameters))
|
|
|
-(defun %db-select (db sql &rest parameters)
|
|
|
- (apply #'sqlite:execute-to-list db sql parameters))
|
|
|
-(defun %db-single (db sql &rest parameters)
|
|
|
- (apply #'sqlite:execute-single db sql parameters))
|
|
|
+ `(if *current-db*
|
|
|
+ (let ((,db *current-db*))
|
|
|
+ (declare (ignorable ,db))
|
|
|
+ ,@body)
|
|
|
+ (sqlite:with-open-database (,db (db-path) :busy-timeout 30)
|
|
|
+ (sqlite:execute-non-query ,db "PRAGMA foreign_keys = ON")
|
|
|
+ (let ((*current-db* ,db))
|
|
|
+ ,@body))))
|
|
|
+
|
|
|
+(defmacro db-transaction (&body body)
|
|
|
+ (let ((db (gensym "DB-")))
|
|
|
+ `(with-db (,db)
|
|
|
+ (sqlite:with-transaction ,db ,@body))))
|
|
|
|
|
|
(defun db-execute (sql &rest parameters)
|
|
|
(with-db (db)
|
|
|
- (apply #'%db-execute db sql parameters)
|
|
|
+ (apply #'sqlite:execute-non-query db sql parameters)
|
|
|
(sqlite:last-insert-rowid db)))
|
|
|
|
|
|
(defun db-select (sql &rest parameters)
|
|
|
(with-db (db)
|
|
|
- (apply #'%db-select db sql parameters)))
|
|
|
+ (apply #'sqlite:execute-to-list db sql parameters)))
|
|
|
|
|
|
(defun db-single (sql &rest parameters)
|
|
|
(with-db (db)
|
|
|
- (apply #'%db-single db sql parameters)))
|
|
|
-
|
|
|
-(defmacro db-transaction ((db) &body body)
|
|
|
- `(with-db (,db)
|
|
|
- (sqlite:with-transaction ,db ,@body)))
|
|
|
+ (apply #'sqlite:execute-single db sql parameters)))
|
|
|
|
|
|
-(defmacro def-db-init ((db) &body body)
|
|
|
- `(add-hook :db-init #'(lambda (,db)
|
|
|
+(defmacro def-db-init (&body body)
|
|
|
+ `(add-hook :db-init #'(lambda ()
|
|
|
(handler-case (progn ,@body)
|
|
|
(error (e) (log:error e)))
|
|
|
(values))))
|
|
|
|
|
|
(defun db-init ()
|
|
|
(with-db (db)
|
|
|
- (%db-execute db "create table if not exists settings (var, val)")
|
|
|
- (%db-execute db "create unique index if not exists settings_var_unique on settings (var)")))
|
|
|
+ (db-execute "create table if not exists settings (var, val)")
|
|
|
+ (db-execute "create unique index if not exists settings_var_unique on settings (var)")))
|