;; all ok. users consists of id, user_name and age.
(crane:filter 'users (:= :user_name "dvk"))
Query: SELECT * FROM "users" WHERE (("user_name" = ?))
(#<USERS {1007CB83D3}>)
;; perfect. Now lets insert a new one:
CL-USER> (crane:create 'users :id 6 :user_name "Olivia" :age 29)
Query: INSERT INTO "users" ("id", "age", "user_name") VALUES (?, ?, ?) RETURNING("id")
;; Enters exception handler, since mSql does not support RETURNING
;;Investigating create% it seems that the test on :sqlite3 fails somewhere.
if (eq db-type :sqlite3)
(query (sxql:insert-into
table-name
(apply #'sxql.clause:make-clause
(cons :set=
(make-set obj))))
(db (class-of obj)))
(query (sxql:insert-into
table-name
(apply #'sxql.clause:make-clause
(cons :set=
(make-set obj)))
(sxql:make-op :returning :id))
(db (class-of obj)))))
Hi, firstly -thanks for such a readable and nice library.
I am experimenting with CRANE on Sqlite3:
(crane:setup (list :migrations-directory #p"/Users/eraaij/vrcproj/sqlitedb/migrations/" :databases '(:main (:type :sqlite3 :name #p"/Users/eraaij/vrcproj/sqlitedb/test.db")) :debug t))
(crane:connect)
;; all ok. users consists of id, user_name and age. (crane:filter 'users (:= :user_name "dvk")) Query: SELECT * FROM "users" WHERE (("user_name" = ?)) (#<USERS {1007CB83D3}>)
;; perfect. Now lets insert a new one: CL-USER> (crane:create 'users :id 6 :user_name "Olivia" :age 29) Query: INSERT INTO "users" ("id", "age", "user_name") VALUES (?, ?, ?) RETURNING("id")
;; Enters exception handler, since mSql does not support RETURNING
;;Investigating create% it seems that the test on :sqlite3 fails somewhere. if (eq db-type :sqlite3) (query (sxql:insert-into table-name (apply #'sxql.clause:make-clause (cons :set= (make-set obj)))) (db (class-of obj))) (query (sxql:insert-into table-name (apply #'sxql.clause:make-clause (cons :set= (make-set obj))) (sxql:make-op :returning :id)) (db (class-of obj)))))
;; thus producing the following after expanding it: (macroexpand-1 (macroexpand-1 '(crane.interface:create 'users :id 6 :user_name "Olivia" :age 29))) (LET* ((CRANE.INTERFACE::OBJ (MAKE-INSTANCE 'USERS :ID 6 :USER_NAME "Olivia" :AGE 29)) (CRANE.META:TABLE-NAME (CRANE.META:TABLE-NAME (CLASS-OF CRANE.INTERFACE::OBJ))) (CRANE.INTERFACE::RESULTS (CRANE.QUERY:QUERY (SXQL:INSERT-INTO CRANE.META:TABLE-NAME (APPLY #'SXQL.CLAUSE:MAKE-CLAUSE (CONS :SET= (CRANE.INTERFACE::MAKE-SET CRANE.INTERFACE::OBJ))) (SXQL.OPERATOR:MAKE-OP :RETURNING :ID)) (CRANE.META:DB (CLASS-OF CRANE.INTERFACE::OBJ)))) (CRANE.INTERFACE::ID (GETF (FIRST CRANE.INTERFACE::RESULTS) :|id|))) (SETF (ID CRANE.INTERFACE::OBJ) CRANE.INTERFACE::ID) CRANE.INTERFACE::OBJ)