Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defclass db-object () ())
- (defun slot-list-from-query (query)
- (format t "slot-list-from-query: ~s~&" query)
- (mapcar
- #'(lambda (pair)
- (format t "pair: ~s~&" pair)
- (let ((name (string-upcase (symbol-name (car pair)))))
- (list (intern name)
- :accessor
- (intern (concatenate 'string name "-OF"))
- :initarg (intern name "KEYWORD")))) query))
- (defun make-class-with-slots (name slots)
- (format t "defining class: ~s, slots: ~s~&" name slots)
- `(defclass ,name (db-object) ,slots))
- (defmacro table-to-class (name describe-table-query)
- `(let ((db-class (make-class-with-slots
- ',name
- (slot-list-from-query ,describe-table-query))))
- (eval db-class)
- (defmethod initialize-instance :after ((object ,name) &key raw-data)
- (mapcar
- #'(lambda (pair)
- (setf (slot-value object
- (find-symbol
- (string-upcase
- (symbol-name (car pair)))))
- (cdr pair))) raw-data))
- db-class))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement