eudoxia0 / crane

An ORM for Common Lisp.
http://eudoxia.me/crane/
201 stars 19 forks source link

crane::create in Sqlite3 seems to take wrong exit on test. #5

Closed eraaij closed 10 years ago

eraaij commented 10 years ago

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)

eudoxia0 commented 10 years ago

I will be adding tests for SQLite3 now and hopefully I'll find out what's causing this.