Skip to content

Commit 7b2da17

Browse files
committed
added database_utils.lsp (for-query-with-db function), improved activate-plugin, some other stuff, the dragonfly_sqlite3.html file is going to be renamed prior to 0.61
1 parent 69d991e commit 7b2da17

File tree

8 files changed

+139
-18
lines changed

8 files changed

+139
-18
lines changed

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Version 0.6.1
33
* now $BINARY can handle large data (compensated for a newLISP bug in 'read-buffer').
44
* added documentation for MAX_POST_LENGTH in request.lsp
55
* fix to Jeff's JSON.lsp plugin (switched to " instead of ' for strings)
6+
* DF:activate-plugin can now be used to load all lisp files in a directory
67

78
Version 0.6
89

example-site/dragonfly-framework/dragonfly.lsp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,15 @@
169169
;; @syntax (DF:activate-plugin <str-plugin-name> [<str-plugin-name-2> ...])
170170
;; @param <str-plugin-name> The name of the plugin to load, without the ".lsp" extension.
171171
;; <br>Loads (once only) a the named plugin from the 'plugins-inactive' folder.
172+
;; <br>If <str-plugin-name> refers to a directory, then loads all of the ".lsp" files in that directory.
172173
(define (activate-plugin)
173174
(doargs (plugin-name)
174-
(load-once (string DRAGONFLY_ROOT "/plugins-inactive/" plugin-name ".lsp"))
175+
(let (plugin-name (string DRAGONFLY_ROOT "/plugins-inactive/" plugin-name))
176+
(if (directory? plugin-name)
177+
(load-files-in-dir plugin-name "\.lsp$")
178+
(load-once (string plugin-name ".lsp"))
179+
)
180+
)
175181
)
176182
)
177183

example-site/dragonfly-framework/lib/utils.lsp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,20 @@
203203
)
204204
)
205205

206+
;; @syntax (define-smacro)
207+
;; <p>Defines a "safe macro", free of variable capture issues. Note though
208+
;; that it does this by placing the macro in its own context, so be careful
209+
;; when choosing its name!</p>
210+
(define-macro (define-smacro)
211+
(let (temp (append (fn-macro) (list (1 (args 0)) (args 1))))
212+
(def-new 'temp (sym (args 0 0) (args 0 0)))
213+
)
214+
)
215+
206216
; these functions should be global (define-subclass should not)
207217
(global 'load-files-in-dir 'regex-captcha 'load-once
208218
'wrap-func 'add-to-load-path 'SET_DF_SELF
209-
'file-ext 'del-ext 'basename 'dirname
219+
'file-ext 'del-ext 'basename 'dirname 'define-smacro
210220
)
211221

212222
; swap these functions for ours and save the originals

example-site/dragonfly-framework/plugins-inactive/db/database.lsp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
;; @module DF.DB, DF.SQL, DF.BLOB
22
;; @description Generic database access interface for <a href="http://www.rundragonfly.com">Dragonfly</a> using Objective newLISP
3-
;; @version 1.1
3+
;; @version 1.2
44
;; @author Greg Slepak
55
;; @location http://www.taoeffect.com/newlisp/database.lsp.txt
66
;; <p>The purpose of this module is to standardize the interface to
@@ -55,6 +55,7 @@
5555
;; @link http://www.rundragonfly.com Dragonfly is only required for its logging functions. You can easily implement your own
5656
;; versions of 'DF:log-err', 'DF:log-debug', and the other functions found in Dragonfly&apos;s 'log.lsp'.
5757
;; <h3>Version history</h3>
58+
;; <b>1.2</b> &bull; added 'DF.SQL:col-name' and 'DF.SQL:col-count' to specification
5859
;; <b>1.1</b> &bull; 'DF.BLOB' added<br/>
5960
;; <b>1.0</b> &bull; initial release
6061

@@ -244,6 +245,14 @@
244245
(throw-not-implemented)
245246
)
246247

248+
(define (DF.SQL:col-name col-num)
249+
(throw-not-implemented)
250+
)
251+
252+
(define (DF.SQL:col-count)
253+
(throw-not-implemented)
254+
)
255+
247256
;; @syntax (DF.SQL:close)
248257
;; <p>Releases the resources used by the SQL statement represented by this object.
249258
;; You cannot use it anymore after calling this method, the only thing left to do

example-site/dragonfly-framework/plugins-inactive/db/database_sqlite3.lsp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
;; @module Sqlite3
22
;; @description SQLite3 subclass of DF.DB. Only lists Sqlite3 specific functions.
3-
;; @version 1.1.1
3+
;; @version 1.1.2
44
;; @author Greg Slepak
55
;; @location http://www.taoeffect.com/newlisp/database_sqlite3.lsp.txt
66
;; <h3>Features not found in newLISP's sqlite3.lsp:</h3>
@@ -19,6 +19,7 @@
1919
;; <h3>Requirements</h3>
2020
;; See module @link http://www.taoeffect.com/newlisp/database.lsp.html DF.DB for requirements.
2121
;; <h3>Version history</h3>
22+
;; <b>1.1.2</b> &bull; fixed a bug in 'get-string-cast' and implemented 'DF.SQL:col-name'
2223
;; <b>1.1.1</b> &bull; improved readability in error logging, fixed binding of integers on 32-bit newlisp builds<br/>
2324
;; <b>1.1.0</b> &bull; support for 'DF.BLOB'<br/>
2425
;; <b>1.0.0</b> &bull; initial release
@@ -267,12 +268,12 @@
267268
(def-new 'Sqlite3:failable)
268269

269270
(set 'lib-funcs '(
270-
"sqlite3_column_count" "sqlite3_finalize" "sqlite3_bind_parameter_index"
271-
"sqlite3_column_name" "sqlite3_reset" "sqlite3_transfer_bindings"
272-
"sqlite3_column_type" "sqlite3_errmsg" "sqlite3_step"
273-
"sqlite3_bind_int64" "sqlite3_column_int64" "sqlite3_bind_int"
274-
"sqlite3_bind_double" "sqlite3_column_double"
275-
"sqlite3_bind_null" "sqlite3_column_text"
271+
"sqlite3_column_count" "sqlite3_finalize" "sqlite3_bind_parameter_index"
272+
"sqlite3_column_name" "sqlite3_reset" "sqlite3_transfer_bindings"
273+
"sqlite3_column_type" "sqlite3_errmsg" "sqlite3_step"
274+
"sqlite3_bind_int64" "sqlite3_column_int64" "sqlite3_bind_int"
275+
"sqlite3_bind_double" "sqlite3_column_double" "sqlite3_column_name"
276+
"sqlite3_bind_null" "sqlite3_column_text" "sqlite3_column_count"
276277
"sqlite3_bind_text" "sqlite3_column_blob"
277278
"sqlite3_bind_blob" "sqlite3_column_bytes"
278279
))
@@ -338,6 +339,14 @@
338339
(zero? (failable (sqlite3_reset stmt)))
339340
)
340341

342+
(define (Sqlite3.SQL:col-name col-num)
343+
(get-string-cast string (sqlite3_column_name stmt col-num))
344+
)
345+
346+
(define (Sqlite3.SQL:col-count)
347+
(sqlite3_column_count stmt)
348+
)
349+
341350
(define (Sqlite3.SQL:close)
342351
(when (and stmt (failable (sqlite3_finalize stmt)))
343352
(setf stmt nil)
@@ -400,8 +409,7 @@
400409
;---------------------------------------------------------------
401410

402411
(define (get-string-cast cast ptr , temp)
403-
(setf temp (get-string ptr))
404-
(if-not (zero? temp) (cast temp))
412+
(if-not (zero? ptr) (cast (get-string ptr)))
405413
)
406414

407415
(define (get-row , (row '()) type i ptr len buf)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
;; @module database_utils
2+
;; @description Utilities for using DF.DB
3+
;; @version 1.0
4+
;; @author Greg Slepak
5+
6+
; define-smacro defined in utils.lsp (part of Dragonfly's core functions)
7+
(define-smacro (for-query-with-db db query)
8+
(letn (db (eval db) sql (db:prepare-sql (eval query)) keys '())
9+
(dotimes (i (sql:col-count))
10+
(push (sym (upper-case (sql:col-name i)) (prefix (caller))) keys -1)
11+
)
12+
(push-autorelease-pool) ; in case we have blobs
13+
(while (list? (setf values (sql:next-row)))
14+
(eval (expand (cons 'begin $args) (unify keys values)))
15+
)
16+
(pop-autorelease-pool)
17+
)
18+
)
19+
; backwards compatibility with newLISP < 10.1.11
20+
(unless (global? 'prefix)
21+
(setf for-query-with-db:prefix (fn-macro () 'DF))
22+
)

example-site/includes/css/screen.css

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -512,13 +512,9 @@ pre.textmate-source {
512512
font-family:Courier,monospace;
513513
font-size:11px;
514514
color:#ffffff;
515-
516-
line-height: 1.5em;
517-
word-wrap: break-word;
515+
line-height: 15px;
518516
white-space: pre;
519-
white-space: pre-wrap;
520-
white-space: -moz-pre-wrap;
521-
white-space: -o-pre-wrap;
517+
overflow: auto;
522518
}
523519

524520
pre.textmate-source .linenum {
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<%
2+
(activate-plugin "db")
3+
(display-partial "doctype")
4+
%>
5+
<head>
6+
<% (display-partial "header") %>
7+
</head>
8+
9+
<body>
10+
11+
<div id="wrap">
12+
<div id="header">
13+
<% (display-partial "navigation") %>
14+
<div class="clear"></div>
15+
</div>
16+
17+
<div id="content">
18+
19+
<div class="title nomargin">
20+
<p><% (title "| Dragonfly web framework") %><p>
21+
</div>
22+
23+
<h1>Using DF.DB</h1>
24+
<p>
25+
<%
26+
(setf db (instantiate Sqlite3 ":memory:"))
27+
(db:execute-update "CREATE TABLE people (name TEXT, age INTEGER)")
28+
(dolist (person '(("Lizzy" 8) ("Sally" 10) ("Betty" 7)))
29+
(db:execute-update "INSERT INTO people VALUES (?,?)" person)
30+
)
31+
%>
32+
<table>
33+
<tr class="header"><td>ID</td><td>Name</td><td>Age</td></tr>
34+
<% (for-query-with-db db "SELECT rowid,name,age FROM people" %>
35+
<tr>
36+
<td><%=ROWID%></td>
37+
<td><%=NAME%></td>
38+
<td><%=AGE%></td>
39+
</tr>
40+
<% ) %>
41+
</table>
42+
</p>
43+
<p>
44+
The table above was created like so:
45+
</p>
46+
<pre class="textmate-source" style="overflow:visible"><span class="text text_html text_html_basic"><span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">table</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
47+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">tr</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">class</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>header<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>ID<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>Name<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>Age<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">tr</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
48+
<span class="source source_newlisp source_newlisp_embedded source_newlisp_embedded_html">&lt;% <span class="entity entity_paren entity_paren_lisp">(</span><span class="entity entity_name entity_name_function entity_name_function_lisp">for-query-with-db</span> <span class="entity entity_symbol entity_symbol_lisp">db</span> <span class="string string_quoted string_quoted_double string_quoted_double_lisp"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_lisp">"</span>SELECT rowid,name,age FROM people<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_lisp">"</span></span> %&gt;</span>
49+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">tr</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
50+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span><span class="source source_newlisp source_newlisp_embedded source_newlisp_embedded_html">&lt;%=<span class="entity entity_symbol entity_symbol_lisp">ROWID</span>%&gt;</span><span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
51+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span><span class="source source_newlisp source_newlisp_embedded source_newlisp_embedded_html">&lt;%=<span class="entity entity_symbol entity_symbol_lisp">NAME</span>%&gt;</span><span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
52+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span><span class="source source_newlisp source_newlisp_embedded source_newlisp_embedded_html">&lt;%=<span class="entity entity_symbol entity_symbol_lisp">AGE</span>%&gt;</span><span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">td</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
53+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">tr</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span>
54+
<span class="source source_newlisp source_newlisp_embedded source_newlisp_embedded_html">&lt;% <span class="entity entity_paren entity_paren_lisp">)</span> %&gt;</span>
55+
<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_begin punctuation_definition_tag_begin_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">table</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_end punctuation_definition_tag_end_html">&gt;</span></span></span></pre>
56+
57+
<div class="line-dotted"></div>
58+
59+
60+
<% (benchmark-result) %>
61+
62+
<div class="line-solid"></div>
63+
64+
65+
</div><!-- END CONTENT -->
66+
67+
</div><!-- END WRAP -->
68+
<% (display-partial "footer") %>
69+

0 commit comments

Comments
 (0)