
Quiero ejecutar algunos queries con postgresql y lisp, para eso necesitamos una libreria que nos permita la comunicación entre postgresql y lisp, la librería que vamos a usar es: postmodern.
Para más información sobre la librería: http://marijnhaverbeke.nl/postmodern/#quickstart
Lo primero que vamos hacer es crear un usuario y una base de datos en postgresql.
En nuestra terminal interactiva de PostgreSQL ejecutamos los siguiente:
create user foo with password 'foobar';
create database bar owner foo ;
Ahora vamos a cargar nuestra librería con quicklisp
(ql:quickload "postmodern")
To load "postmodern":
Load 1 ASDF system:
postmodern
; Loading "postmodern"
("postmodern")
Después de eso vamos a crear un archivo con lo siguiente, el nombre del archivo puede ser el de tu preferencia.
(in-package :postmodern)
;; Defino una variable global para poner los datos de la conexión a postgresql
(defvar *db-parameters* '("bar" "foo" "foobar" "localhost" :POOLED-P T))
;; definimos un macro para hacer la conexión a postgresql y ejecutar queries
(defmacro with-database (&body query)
"This macro creates the connection and disconnection with specified database in *db-parameter* and execute the query."
`(postmodern:with-connection *db-parameters* ,@query))
;;; Definimos una simple tabla para nuestro ejemplo
(deftable fruits
(:create-table fruits
((id_fruit
:type :serial
:primary-key t
:unique t)
(name
:type string))))
(with-database
(create-table 'fruits))
;;; Definimos algunas funciones para ejecutar los ejemplos de: insert, select, update y delete
(defun insert (name)
(with-database
(query (:insert-into 'fruits
:set 'name name))))
(defun select-by (id)
(with-database
(query (:select 'name
:from 'fruits
:where (:= 'id_fruit id)) :single)))
(defun update-name-by (id new-name)
(with-database
(query (:update 'fruits
:set 'name new-name
:where (:= 'id_fruit id)))))
(defun delete-by (id)
(with-database
(query (:delete-from 'fruits
:where (:= 'id_fruit id)))))
Después de haber creado las funciones las vamos a usar.
Probando las funciones en nuestro entorno de programación
POMO> (insert "appple")
NIL
1
POMO> (select-by 1)
"appple"
1
POMO> (update-name-by 1 "apple")
NIL
1
POMO> (delete-by 1)
NIL
1
Autor: Juan Reynoso
Hacks and glory await!
#lisp #postmodern