X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=examples%2Fclsql-tutorial.lisp;h=1980e3db0f4acd70fe0b8f76406af4dcae0cf1b2;hp=265ae6d2e34edb1930ac537b1a4c77d29f2b3aca;hb=refs%2Ftags%2Fv3.8.6;hpb=215ec41559dda52d46539d48a0aa390811c2423c diff --git a/examples/clsql-tutorial.lisp b/examples/clsql-tutorial.lisp index 265ae6d..1980e3d 100644 --- a/examples/clsql-tutorial.lisp +++ b/examples/clsql-tutorial.lisp @@ -2,17 +2,17 @@ (in-package #:clsql-user) -;; You must set these variables to appropriate values. -(defvar *tutorial-database-type* nil +;; You must set these variables to appropriate values. +(defvar *tutorial-database-type* nil "Possible values are :postgresql :postgresql-socket, :mysql, :oracle, :odbc, :aodbc or :sqlite") (defvar *tutorial-database-name* "clsqltut" "The name of the database we will work in.") -(defvar *tutorial-database-user* "" +(defvar *tutorial-database-user* "" "The name of the database user we will work as.") (defvar *tutorial-database-server* "" "The name of the database server if required") -(defvar *tutorial-database-password* "" +(defvar *tutorial-database-password* "" "The password if required") (clsql:def-view-class employee () @@ -40,9 +40,9 @@ :accessor employee-company :db-kind :join :db-info (:join-class company - :home-key companyid - :foreign-key companyid - :set nil)) + :home-key companyid + :foreign-key companyid + :set nil)) (managerid :type integer :initarg :managerid) @@ -50,9 +50,9 @@ :accessor employee-manager :db-kind :join :db-info (:join-class employee - :home-key managerid - :foreign-key emplid - :set nil))) + :home-key managerid + :foreign-key emplid + :set nil))) (:base-table employee)) (clsql:def-view-class company () @@ -71,35 +71,35 @@ :reader president :db-kind :join :db-info (:join-class employee - :home-key presidentid - :foreign-key emplid - :set nil)) + :home-key presidentid + :foreign-key emplid + :set nil)) (employees :reader company-employees :db-kind :join :db-info (:join-class employee - :home-key companyid - :foreign-key companyid - :set t))) + :home-key companyid + :foreign-key companyid + :set t))) (:base-table company)) ;; Connect to the database (see the CLSQL documentation for vendor ;; specific connection specs). (case *tutorial-database-type* ((:mysql :postgresql :postgresql-socket) - (clsql:connect `(,*tutorial-database-server* - ,*tutorial-database-name* - ,*tutorial-database-user* - ,*tutorial-database-password*) - :database-type *tutorial-database-type*)) + (clsql:connect `(,*tutorial-database-server* + ,*tutorial-database-name* + ,*tutorial-database-user* + ,*tutorial-database-password*) + :database-type *tutorial-database-type*)) ((:odbc :aodbc :oracle) - (clsql:connect `(,*tutorial-database-name* - ,*tutorial-database-user* - ,*tutorial-database-password*) - :database-type *tutorial-database-type*)) + (clsql:connect `(,*tutorial-database-name* + ,*tutorial-database-user* + ,*tutorial-database-password*) + :database-type *tutorial-database-type*)) (:sqlite (clsql:connect `(,*tutorial-database-name*) - :database-type *tutorial-database-type*))) + :database-type *tutorial-database-type*))) ;; Record the sql going out, helps us learn what is going ;; on behind the scenes @@ -117,38 +117,38 @@ ;; Create some instances of our view classes (defvar company1 (make-instance 'company - :companyid 1 - :name "Widgets Inc." - ;; Lenin is president of Widgets Inc. - :presidentid 1)) + :companyid 1 + :name "Widgets Inc." + ;; Lenin is president of Widgets Inc. + :presidentid 1)) (defvar employee1 (make-instance 'employee - :emplid 1 - :first-name "Vladamir" - :last-name "Lenin" - :email "lenin@soviet.org" - :companyid 1)) + :emplid 1 + :first-name "Vladamir" + :last-name "Lenin" + :email "lenin@soviet.org" + :companyid 1)) (defvar employee2 (make-instance 'employee - :emplid 2 - :first-name "Josef" - :last-name "Stalin" - :email "stalin@soviet.org" - :companyid 1 - ;; Lenin manages Stalin (for now) - :managerid 1)) + :emplid 2 + :first-name "Josef" + :last-name "Stalin" + :email "stalin@soviet.org" + :companyid 1 + ;; Lenin manages Stalin (for now) + :managerid 1)) (clsql:update-records-from-instance employee1) (clsql:update-records-from-instance employee2) (clsql:update-records-from-instance company1) -;; lets use the functional sql interface +;; lets use the functional sql interface (clsql:locally-enable-sql-reader-syntax) (format t "The email address of ~A ~A is ~A" - (first-name employee1) - (last-name employee1) - (employee-email employee1)) + (first-name employee1) + (last-name employee1) + (employee-email employee1)) (setf (employee-email employee1) "lenin-nospam@soviets.org") @@ -156,11 +156,11 @@ (clsql:update-records-from-instance employee1) (let ((new-lenin (car - (clsql:select 'employee - :where [= [slot-value 'employee 'emplid] 1] - :flatp t)))) + (clsql:select 'employee + :where [= [slot-value 'employee 'emplid] 1] + :flatp t)))) (format t "His new email is ~A" - (employee-email new-lenin))) + (employee-email new-lenin))) ;; Some queries @@ -172,17 +172,17 @@ ;; employees named Lenin (clsql:select 'employee :where [= [slot-value 'employee 'last-name] - "Lenin"]) + "Lenin"]) (clsql:select 'company :where [= [slot-value 'company 'name] - "Widgets Inc."]) + "Widgets Inc."]) ;; Employees of Widget's Inc. (clsql:select 'employee - :where [and [= [slot-value 'employee 'companyid] - [slot-value 'company 'companyid]] - [= [slot-value 'company 'name] - "Widgets Inc."]]) + :where [and [= [slot-value 'employee 'companyid] + [slot-value 'company 'companyid]] + [= [slot-value 'company 'name] + "Widgets Inc."]]) ;; Same thing, except that we are using the employee ;; relation in the company view class to do the join for us,