Skip to content

Commit

Permalink
`fetch-all'
Browse files Browse the repository at this point in the history
  • Loading branch information
fukamachi committed May 1, 2012
1 parent dd0ea86 commit 41e30a9
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ This library will be available on Quicklisp when ready to use.
* prepare [conn sql] => <dbi-query>
* execute [query & params] => something
* fetch [result] => a row data as plist
* fetch-all [result] => a list of all row data
* do-sql [conn sql & params]
* list-all-drivers [] => (<dbi-driver> ..)
* find-driver [driver-name] => <dbi-driver>
Expand Down
2 changes: 2 additions & 0 deletions src/dbi.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
:prepare
:execute
:fetch
:fetch-all
:do-sql
:begin-transaction
:commit
Expand All @@ -25,6 +26,7 @@
:prepare
:execute
:fetch
:fetch-all
:do-sql
:begin-transaction
:commit
Expand Down
7 changes: 7 additions & 0 deletions src/driver.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,13 @@ This method may be overrided by subclasses."
"Fetch the first row from `query` which is returned by `execute`."
(fetch-using-connection (query-connection query) query))

@export
(defmethod fetch-all ((query <dbi-query>))
"Fetch all rest rows from `query`."
(loop for result = (fetch query)
while result
collect result))

@export
(defmethod fetch-using-connection ((conn <dbi-connection>) (query <dbi-query>))
(error '<dbi-unimplemented-error>
Expand Down
5 changes: 4 additions & 1 deletion src/test.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
@export
(defun run-driver-tests (driver-name &rest params)
(let ((*db* (apply #'connect driver-name params)))
(plan 17)
(plan 18)
(run-test-all)))

(deftest |connect|
Expand All @@ -39,6 +39,9 @@
(setf query (prepare *db* "SELECT * FROM person"))
(is-type query '<dbi-query>)
(setf result (execute query))
(is (fetch-all result)
'((:|id| 1 :|name| "fukamachi") (:|id| 2 :|name| "matsuyama")))
(setf result (execute query))
(is-type result '<dbi-query>)
(let ((result (fetch result)))
(is-type result '(non-nil property-list))
Expand Down

0 comments on commit 41e30a9

Please sign in to comment.