El Modo SQL de Emacs Ismael Sanz Departamento de Ingeniería y Ciencias de la Computación Universitat Jaume I 1. Introducción Las bases de datos relacionales suelen proporcionar unos intérpretes interactivos en modo texto; por ejemplo, SQL*Plus en Oracle y psql en PostgreSQL. Por desgracia, su facilidad de uso suele dejar bastante que desear, lo que hace imprescindible el uso de un editor externo. En este documento presentamos el Modo SQL para Emacs y XEmacs, que proporciona una manera cómoda de trabajar con estos intérpretes. El Modo SQL permite trabajar con SQL sin salir del editor, y proporciona comandos específicos que facilitan las tareas más usuales, como evaluar un conjunto de expresiones SQL. En primer lugar repasaremos algunos de los conceptos básicos de Emacs 1 ; si ya estás familiarizado con estos editores puedes saltarte la sección. A continuación describimos como entrar en Modo SQL, y finalmente cómo se trabaja con él. 1.1. Repaso de conceptos básicos de Emacs El editor Emacs tiene una larga tradición, y ha ido creando un vocabulario propio que muchas veces no se corresponde con el de otros editores. A continuación se presentan algunos de los conceptos más importantes de Emacs. Buffers. Emacs es un editor multidocumento; cada fichero se edita en un buffer diferente. Además, hay buffers especiales en las que no hay documentos propiamente dichos, sino donde pueden ejecutarse procesos. Línea de estado. La línea de estado aparece en la parte inferior de un buffer. Contiene el nombre del buffer (que se corresponde generalmente con el nombre del fichero que se está editando) y otras informaciones, como el modo o el número de línea actual. Modo. Emacs es un editor extensible, y puede ser programado con funciones especiales para tratar con tipos de fichero específicos. Por ejemplo, al editar un fichero con código C se entra en el modo C, en el cual se reconoce la sintaxis de C y se añaden comandos especiales para compilar. La extensión del fichero (.c,.py,... ) suele determinar el modo. 1 A partir de este momento, utilizaremos Emacs para referirnos tanto a Emacs propiamente dicho como a XEmacs; las diferencias entre ambos no son importantes en este caso. 1
Minibuffer. El minibuffer es la última línea de la ventana de Emacs. Se utiliza para la entrada interactiva de datos; por ejemplo, para confirmar comandos. Comandos de Emacs. Emacs dispone de una librería muy rica de comandos. Para ejecutarlos, se pulsa la combinación de teclas Alt-x (que en Emacs aparece como M-x), y seguidamente se introduce el nombre del comando en el minibuffer. Como ejemplo puedes probar el comando goto-line, que desplaza el cursor a la línea especificada. 2. Activación del modo SQL Antes de poder trabajar con el modo SQL debemos indicar a Emacs qué intérprete debemos usar. Para ello debes seguir los siguientes pasos: 1. Entra en modo SQL. 2. Invoca el intérprete de SQL. 3. Activa los menús del modo SQL. A continuación se detallan estas tres tareas. 2.1. Paso 1: Entra en modo SQL Abre en Emacs o XEmacs un fichero con extensión.sql. La línea de estado mostrará que se ha entrado en modo SQL: Figura 1: La línea de estado de Emacs en modo SQL En caso de que el fichero no tenga extensión.sql será necesario entrar en el modo SQL manualmente. Para ello pulsa la combinación de teclas Alt-x, seguida del comando sql-mode, como se muestra en la siguiente figura. Figura 2: Comando para entrar en modo SQL 2
2.2. Paso 2: Invoca el intérprete de SQL El segundo paso consiste en lanzar un intérprete de SQL en un buffer de Emacs. Para ello es necesario ejecutar otro comando de Emacs, que dependerá de la base de datos con la que se desea trabajar. Para Oracle es sql-oracle, y para PostgreSQL es sql-postgres 2. 2.2.1. Para Oracle (SQL*Plus) Para lanzar SQL*Plus desde el editor es necesario pulsar la combinación de teclas Alt-x seguida del comando de Emacs sql-oracle (Figura 3). Figura 3: Comando para lanzar el intérprete de Oracle A continuación debes introducir los parámetros de conexión. En el minibuffer se solicitan sucesivamente los siguientes datos: 1. User: El nombre de usuario en Oracle. 2. Password: La contraseña de Oracle. 3. Database: La base de datos a la que conectarse. Se suele dejar en blanco. Si todo va bien, se lanzará SQL*Plus en un nuevo buffer de Emacs, como muestra la Figura 4. 2.2.2. Para PostgreSQL (psql) Para lanzar psql desde el editor es necesario pulsar la combinación de teclas Alt-x seguida del comando de Emacs sql-postgres (Figura 5). A continuación debes introducir los parámetros de conexión. En el minibuffer se solicitan sucesivamente los siguientes datos: 1. Server: El servidor en el que se ejecuta PostgreSQL. Se debe dejar en blanco si se trabaja en la máquina local. 2. Database: La base de datos a la que conectarse, si es diferente de la base de datos por defecto del usuario. Si todo va bien, se lanzará psql en un nuevo buffer de Emacs, como muestra la Figura 6. 2 El modo SQL soporta muchas otras bases de datos; consulta la documentación para ver la lista completa. 3
Figura 4: SQL*Plus corriendo como un buffer de Emacs. Fíjate que el nombre del buffer es *SQL* Figura 5: Comando para lanzar psql 2.3. Paso 3: Activa los menús del modo SQL En el buffer que acabas de crear puedes utilizar SQL*Plus o psql como si estuvieras en el terminal, pero con todas las capacidades de edición de Emacs incorporadas. Esto ya es una avance, pero resulta aún más cómodo lanzar órdenes SQL desde el menú SQL. Sin embargo, fíjate que en el menú SQL estas órdenes están desactivadas (Figura 7). Para activarlas, debes indicar a Emacs en qué buffer está corriendo el intérprete que deseas utilizar. Para ello se utiliza la opción Set SQLi buffer del menú SQL. Una vez seleccionada la opción, en el minibuffer se te pregunta por el buffer correcto (Figura 8). Normalmente la respuesta correcta es siempre *SQL*, y basta con pulsar Enter para que se activen los menús. Es posible que tengas que realizar este último paso para cada nuevo fichero con el que quieras utilizar el modo SQL. 3. Trabajo con el modo SQL Como hemos visto, el modo SQL permite trabajar directamente con el intérprete de SQL dentro de un buffer, lo que permite aprovechar toda la capacidad de edición de Emacs. Sin embargo, esta no es la mejor manera de trabajar, salvo para pequeñas pruebas que no merezca la pena guardar. Los comandos del menú SQL permiten ejecutar SQL desde un fichero que estamos editando, sin necesidad de ir cambiando de un buffer a otro. 4
Figura 6: psql corriendo como un buffer de Emacs. Fíjate que el nombre del buffer es *SQL* Los comandos que proporciona el modo SQL son los siguientes: Send Paragraph (Ctrl-c Ctrl-c). Envía al intérprete la sentencia SQL en la que se encuentra el cursor. No es necesario estar al principio de la sentencia. Send Region (Ctrl-c Ctrl-r). Si hay una región de texto seleccionada, la envía al intérprete SQL. Send Buffer (Ctrl-c Ctrl-b). Envía el contenido completo del buffer al intérprete. Equivalente a usar @ en SQL*Plus o \i en psql. 4. Para más información... En Emacs siempre está disponible la ayuda específica para el modo en que nos encontremos. Desde un buffer en modo SQL basta pulsar Ctrl-h m. Para tener todos los detalles sobre el modo SQL puedes visitar su página web 3, que incluye información avanzada como, por ejemplo, cómo eliminar los molestos números de línea que muestra SQL*Plus. 3 http://www.geocities.com/kensanata/emacs-sql.html 5
Figura 7: El menú SQL antes de activarlo Figura 8: Selección del buffer del intérprete Figura 9: El menú SQL completamente activado 6