2010-11-19 9 views
2

настоящее время я использую Emacs SQL-режим, как моя SQL оболочки, а (упрощенно) ответа на запрос ниже:Homoiconicity и 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) 

Если я хочу, чтобы затем сформулировать еще один запрос на основе этих данных, например,

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

Вы увидите, что я должен добавить запятую между visit_key и created и окружать экспирации значение в кавычки.

Есть ли SQL-оболочка SQL, которая показывает ее содержимое более homoiconically, так что я мог бы свести к минимуму такое редактирование? например

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

или

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

Я использую PostgreSQL кстати.

+1

+1 для ссылки на wiki! 80)) – Keng

ответ

1

Вот одна идея, которая похожа на то, что я иногда делаю, хотя я не уверен, что это именно то, что вы просите:

Run лисповскую компилятор (как SBCL) в SLIME. Затем загрузите CLSQL. Он имеет «язык манипулирования функциональными данными» (SELECT documentation), который может помочь вам сделать что-то подобное, возможно, в сочетании с возможностями автозаполнения SLIME. Если нет, легко определить функции и макросы Lisp (предполагая, что вы знаете Lisp, но вы уже являетесь Emacser!).

Из-за коробки он не дает красиво отформатированных таблиц, которые имеют большинство интерфейсов SQL, но даже это не так сложно добавить. И Lisp, безусловно, достаточно мощный, чтобы позволить вам легко придумать, как облегчить ваши общие операции.

0

Я нашел следующие изменения в PSQL каким-то образом давая мне homoiconicity:

=# 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 

предостережений: все это строка, и она отсутствует начала и конца цитаты.