2010-11-19 2 views
2

Ich bin derzeit Emacs SQL-Modus als meine SQL-Shell, eine (vereinfachte) Abfrage-Antwort unter Verwendung unter:Homoikonizität und SQL

my_db=# select * from visit limit 4; 

num |  visit_key   |   created   | expiry 
----+-----------------------------+----------------------------+------------ 
1 | 0f6fb8603f4dfe026d88998d81a | 2008-03-02 15:17:56.899817 | 2008-03-02 
2 | 7c389163ff611155f97af692426 | 2008-02-14 12:46:11.02434 | 2008-02-14 
3 | 3ecba0cfb4e4e0fdd6a8be87b35 | 2008-02-14 16:33:34.797517 | 2008-02-14 
4 | 89285112ef2d753bd6f5e51056f | 2008-02-21 14:37:47.368657 | 2008-02-21 
(4 rows) 

Wenn ich will dann eine weitere Abfrage formulieren auf der Grundlage dieser Daten, z.B.

my_db=# select visit_key, created from visit where expiry = '2008-03-02' 
      and num > 10; 

Sie werden sehen, dass ich das Komma zwischen visit_key und created und umgeben den Ablaufwert mit Anführungszeichen zu verwenden.

Gibt es eine SQL DB-Shell, die ihren Inhalt mehr homoiconically zeigt, so dass ich diese Art der Bearbeitung minimieren konnte? z.B.

num, visit_key, created, expiry   
(1, '0f6fb8603f4dfe026d88998d81a', '2008-03-02 15:17:56.899817', '2008-03-02') 

oder

(num=1, visit_key='0f6fb8603f4dfe026d88998d81a', 
    created='2008-03-02 15:17:56.899817', expiry='2008-03-02')  

Ich verwende btw postgresql.

+1

+1 für den Wiki-Link! 80)) – Keng

Antwort

1

Hier ist eine Idee, die ähnlich ist, was ich manchmal tun, obwohl ich nicht sicher bin, dass es genau das, was Sie fragen nach:

Run einen Lisp-Compiler (wie SBCL) in SLIME. Laden Sie dann CLSQL. Es hat eine "Functional Data Manipulation Language" (SELECT documentation), die Ihnen helfen könnte, etwas zu tun, was Sie wollen, vielleicht in Verbindung mit den automatischen Vervollständigungsfunktionen von SLIME. Wenn nicht, ist es einfach, Lisp-Funktionen und Makros zu definieren (vorausgesetzt, Sie kennen Lisp, aber Sie sind bereits ein Emacser!).

Out-of-the-Box, es gibt nicht die schön formatierten Tabellen, die die meisten SQL-Schnittstellen haben, aber selbst das ist nicht zu schwer hinzuzufügen. Und Lisp ist sicherlich stark genug, dass man leicht Wege finden kann, um die gemeinsamen Operationen einfacher zu machen.

0

Ich habe die folgenden Änderungen in psql gehen einen Weg, mich zu geben Homoikonizität gefunden:

=# select remote_ip, referer, http_method, time from hit limit 1; 
    remote_ip | referer | http_method |   time    
-----------------+---------+-------------+--------------------------- 
213.233.132.148 |   | GET   | 2013-08-27 08:01:42.38808 
(1 row) 
=# \a 
Output format is unaligned. 
=# \f ''', ''' 
Field separator is "', '". 
=# \t 
Showing only tuples. 
=# select remote_ip, referer, http_method, time from hit limit 1; 
213.233.132.148', '', 'GET', '2013-08-27 08:01:42.38808 

Einsprüche: alles ist eine Zeichenfolge, und es ist Anfang und Ende Anführungszeichen fehlt.