eudoxia0 / crane

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

Foreign keys #47

Closed blasut closed 8 years ago

blasut commented 8 years ago

When trying to use foreign keys I get an error:

The slot CRANE.META:COL-TYPE is unbound in the object

This is the code I'm trying to use:

(deftable computers ()
  (name :type text :uniquep t)
  (age  :type integer))

(deftable user ()
  (name :type text :uniquep t)
  (age  :type integer :indexp t)
  (computer :foreign-key 'computers :nullp nil))

Backtrace:

  0: ((:METHOD SLOT-UNBOUND (T T T)) #<unavailable argument> #<CRANE.META::TABLE-CLASS-DIRECT-SLOT-DEFINITION COMPUTER> CRANE.META:COL-TYPE) [fast-method]
  1: (SB-PCL::SLOT-UNBOUND-INTERNAL #<CRANE.META::TABLE-CLASS-DIRECT-SLOT-DEFINITION COMPUTER> 11)
  2: ((:METHOD SB-MOP:COMPUTE-EFFECTIVE-SLOT-DEFINITION (CRANE.META:<TABLE-CLASS> T T)) #<CRANE.META:<TABLE-CLASS> USER> COMPUTER (#<CRANE.META::TABLE-CLASS-DIRECT-SLOT-DEFINITION COMPUTER>)) [fast-method]
  3: (SB-PCL::STD-COMPUTE-SLOTS #<CRANE.META:<TABLE-CLASS> USER>)
  4: ((:METHOD SB-MOP:COMPUTE-SLOTS :AROUND (STANDARD-CLASS)) #<CRANE.META:<TABLE-CLASS> USER>) [fast-method]
  5: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-PCL::UPDATE-CLASS))
  6: ((FLET #:WITHOUT-INTERRUPTS-BODY-607 :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK))
  7: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-PCL::UPDATE-CLASS) {12236B7B}> #<SB-THREAD:MUTEX "World Lock" owner: #<SB-THREAD:THREAD "new-repl-threa..
  8: ((LABELS SB-PCL::REC :IN SB-PCL::UPDATE-CLASS) #<CRANE.META:<TABLE-CLASS> USER> T NIL)
  9: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SB-MOP:FINALIZE-INHERITANCE (FIND-CLASS (QUOTE USER))) #<NULL-LEXENV>)
 10: (SB-IMPL::SIMPLE-EVAL-PROGN-BODY ((DEFCLASS USER (<TABLE>) (# # # #) (:METACLASS CRANE.META:<TABLE-CLASS>)) (SB-MOP:FINALIZE-INHERITANCE (FIND-CLASS #)) (UNLESS (CRANE.META:DEFERREDP #) (BUILD #))) #<..
 11: (SB-INT:SIMPLE-EVAL-IN-LEXENV (DEFTABLE USER NIL (NAME :TYPE TEXT :UNIQUEP T) (AGE :TYPE INTEGER :INDEXP T) (COMPUTER :FOREIGN-KEY (QUOTE COMPUTERS) :NULLP NIL)) #<NULL-LEXENV>)
 12: (EVAL (DEFTABLE USER NIL (NAME :TYPE TEXT :UNIQUEP T) (AGE :TYPE INTEGER :INDEXP T) (COMPUTER :FOREIGN-KEY (QUOTE COMPUTERS) :NULLP NIL)))
blasut commented 8 years ago

I read the example in the README and it works fine. Closing this, maybe I can help with documentation so that it's the same everywhere?