- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
(require 'clsql)
(clsql:file-enable-sql-reader-syntax)
(clsql:connect
'("localhost" "database" "user" "password")
:database-type :mysql)
(defun how-many-goods-do-you-have (year month)
(declare
(type (integer 2000 2011) year)
(type (integer 1 12) month))
(clsql:select [item_id] [sale_date]
:from "table"
:where [or
[is [null [sale_date]]]
[< [sale_date]
(clsql:sql 'str_to_date\(
(format
nil
"~a-~2,'0d-00"
year month)
'|, '%Y-%m-%d')|
)]]))
roman-kashitsyn 26.02.2012 12:41 # 0
Для Clojure уже есть неплохой ништяк для этого:
wvxvw 26.02.2012 13:06 # 0
roman-kashitsyn 26.02.2012 13:17 # 0
wvxvw 26.02.2012 13:42 # 0
Dummy00001 26.02.2012 15:05 # 0
как-то для лиспа это неправильно, если селект не есть (select (from ...) (where ...) ...), потому что концепцию ломает.
да и опять же: я бы разделил генерацию запросов от их исполнения. это здесь очень похоже не делается.
ЗЫ с одной сторны. с другой, а на кой фиг? народ знает SQL и есть внешние тулзы для работы с ним - самый логичный и гибкий вариант это оставить запросы строками. и с нестандартизироваными хинтами граблей потом тоже не будет.
roman-kashitsyn 26.02.2012 15:13 # +1
wvxvw 26.02.2012 15:22 # 0
Вложенные селекты - интересно :) Не знаю, никогда не нужно было, я только для каких-то совсем примитивных вещей использовал. Но как видно из примера выше - запихать любую строку можно в селект, ну ток выглядит страшновато :)
__construct 26.02.2012 13:25 # 0
roman-kashitsyn 26.02.2012 13:31 # +3
Искренне Ваш, КО.
__construct 26.02.2012 17:39 # 0
wvxvw 26.02.2012 13:49 # 0
roman-kashitsyn 26.02.2012 14:39 # 0
clsql-6.1.1/sql/syntax.lisp
wvxvw 26.02.2012 14:44 # 0
dos_ 26.02.2012 19:02 # 0