mkhl / io fork watch download tarball
public
Fork of stevedekorte/io
Description: Io programming language
Homepage: http://iolanguage.com
Clone URL: git://github.com/mkhl/io.git
launchPath fix for build.io and DBI doc updates
Steve Dekorte (author)
Thu Feb 07 04:46:21 -0800 2008
commit  ae0d695ed1d5a3db3b37206ef5900dcec9790d58
tree    358a2923dfaa653df0285c194243def5db44c9d2
parent  ad0e9f888b15b8bfbf9c9639a2549309b8d35f8d
...
36
37
38
 
39
40
41
42
43
44
 
45
46
47
...
36
37
38
39
40
41
42
43
44
45
46
47
48
49
0
@@ -36,12 +36,14 @@ DBIRecord := Object clone do(
0
     self _map := Map clone
0
   )
0
 
0
+ //doc DBIRecord with(aMap) Returns a new DBIRecord instance for the given value map.
0
   with := method(aMap,
0
     obj := self clone
0
     obj _map := aMap
0
     obj
0
   )
0
 
0
+ //doc DBIRecord forward Private method that implements getting and setting values.
0
   forward := method(
0
     m := call message
0
 
...
80
81
82
83
84
85
 
 
86
87
88
89
90
91
92
93
 
 
94
95
96
...
107
108
109
110
111
112
 
 
113
114
115
...
137
138
139
140
141
 
 
142
143
144
...
148
149
150
151
 
152
153
154
...
172
173
174
175
176
177
 
 
178
179
180
...
80
81
82
 
 
 
83
84
85
86
87
88
89
 
 
 
90
91
92
93
94
...
105
106
107
 
 
 
108
109
110
111
112
...
134
135
136
 
 
137
138
139
140
141
...
145
146
147
 
148
149
150
151
...
169
170
171
 
 
 
172
173
174
175
176
0
@@ -80,17 +80,15 @@ void IoDBI_free(IoDBI *self)
0
 
0
 IoObject *IoDBI_version(IoDBI *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("version", "Return string version of libdbi being used")
0
- */
0
+ //doc DBI version Return string version of libdbi being used.
0
+
0
   return IOSYMBOL(dbi_version());
0
 }
0
 
0
 IoObject *IoDBI_init(IoDBI *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("init", "Initialize the DBI environment with the default driver path")
0
- */
0
+ //doc DBI init Initialize the DBI environment with the default driver path.
0
+
0
   DATA(self)->driverCount = dbi_initialize(NULL);
0
   if (DATA(self)->driverCount == -1)
0
   {
0
@@ -107,9 +105,8 @@ IoObject *IoDBI_init(IoDBI *self, IoObject *locals, IoMessage *m)
0
 IoObject *IoDBI_initWithDriversPath(IoDBI *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("initWithDriversPath", "Initialize the DBI environment with the
0
- specified libdbi driver path")
0
+ /*doc DBI initWithDriversPath
0
+ Initialize the DBI environment with the specified libdbi driver path.
0
   */
0
   IoObject *dir = IoMessage_locals_valueArgAt_(m, locals, 0);
0
 
0
@@ -137,8 +134,8 @@ IoObject *IoDBI_initWithDriversPath(IoDBI *self, IoObject *locals,
0
 
0
 IoObject *IoDBI_drivers(IoDBI *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("drivers", "Get a list of drivers and it's associated information:
0
+ /*doc DBI drivers
0
+ Get a list of drivers and it's associated information:
0
 
0
   <ol>
0
     <li>name</li>
0
@@ -148,7 +145,7 @@ IoObject *IoDBI_drivers(IoDBI *self, IoObject *locals, IoMessage *m)
0
     <li>date compiled</li>
0
     <li>maintainer</li>
0
     <li>url</li>
0
- </ol>")
0
+ </ol>
0
   */
0
   IoList *list = IOREF(IoList_new(IOSTATE));
0
   dbi_driver driver = NULL;
0
@@ -172,9 +169,8 @@ IoObject *IoDBI_drivers(IoDBI *self, IoObject *locals, IoMessage *m)
0
 
0
 IoObject *IoDBI_with(IoDBI *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("with(driverName)", "Get a new connection with the given driver")
0
- */
0
+ //doc DBI with(driverName) Get a new connection with the given driver.
0
+
0
   IoObject *name = IoMessage_locals_valueArgAt_(m, locals, 0);
0
   if (!ISSYMBOL(name))
0
   {
...
93
94
95
96
97
98
 
 
99
100
101
102
103
104
105
106
107
108
 
 
109
110
111
...
135
136
137
138
139
140
 
 
141
142
143
...
153
154
155
156
157
158
 
 
159
160
161
...
170
171
172
173
174
175
 
 
176
177
178
...
180
181
182
183
184
185
186
 
 
187
 
188
189
190
...
199
200
201
202
203
204
 
 
205
206
207
...
212
213
214
215
216
217
 
 
218
219
220
...
222
223
224
225
226
227
 
 
 
228
 
229
230
231
232
233
234
235
236
 
 
237
 
238
239
240
...
268
269
270
271
272
273
 
 
274
 
275
276
277
 
278
279
280
...
283
284
285
 
286
287
288
 
289
290
291
...
297
298
299
300
301
302
 
 
 
303
 
304
305
306
...
332
333
334
335
336
 
 
337
 
338
 
339
340
341
...
357
358
359
360
361
362
 
 
363
 
364
 
365
366
367
...
93
94
95
 
 
 
96
97
98
99
100
101
102
103
 
 
 
 
104
105
106
107
108
...
132
133
134
 
 
 
135
136
137
138
139
...
149
150
151
 
 
 
152
153
154
155
156
...
165
166
167
 
 
 
168
169
170
171
172
...
174
175
176
 
 
 
 
177
178
179
180
181
182
183
...
192
193
194
 
 
 
195
196
197
198
199
...
204
205
206
 
 
 
207
208
209
210
211
...
213
214
215
 
 
 
216
217
218
219
220
221
222
223
224
225
 
 
 
226
227
228
229
230
231
232
...
260
261
262
 
 
 
263
264
265
266
267
268
269
270
271
272
273
...
276
277
278
279
280
281
282
283
284
285
286
...
292
293
294
 
 
 
295
296
297
298
299
300
301
302
...
328
329
330
 
 
331
332
333
334
335
336
337
338
339
...
355
356
357
 
 
 
358
359
360
361
362
363
364
365
366
0
@@ -93,19 +93,16 @@ IoDBIConn *IoDBIConn_new(void *state, dbi_conn conn)
0
 
0
 IoObject *IoDBIConn_driver(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("driver", "Return database driver name.")
0
- */
0
+ //doc DBIConn driver Return database driver name.
0
+
0
   dbi_driver d = dbi_conn_get_driver(DATA(self)->conn);
0
   return IOSYMBOL(dbi_driver_get_name(d));
0
 }
0
 
0
 IoObject *IoDBIConn_optionPut(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("optionPut(key,value)", "Add an option key, value pair to the
0
-connection.")
0
- */
0
+ //doc DBIConn optionPut(key,value) Add an option key, value pair to the connection.
0
+
0
   IoObject *key = IoMessage_locals_valueArgAt_(m, locals, 0);
0
   IoObject *val = IoMessage_locals_valueArgAt_(m, locals, 1);
0
 
0
@@ -135,9 +132,8 @@ connection.")
0
 
0
 IoObject *IoDBIConn_option(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("option(key)", "Retrieve an option value for the connection.")
0
- */
0
+ //doc DBIConn option(key) Retrieve an option value for the connection.
0
+
0
   IoObject *key = IoMessage_locals_valueArgAt_(m, locals, 0);
0
   if (!ISSYMBOL(key))
0
   {
0
@@ -153,9 +149,8 @@ IoObject *IoDBIConn_option(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 IoObject *IoDBIConn_options(IoDBIConn *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("options", "Retrieve an option list of the connection.")
0
- */
0
+ //doc DBIConn options Retrieve an option list of the connection.
0
+
0
   IoList *list = IOREF(IoList_new(IOSTATE));
0
   const char *option = NULL;
0
 
0
@@ -170,9 +165,8 @@ IoObject *IoDBIConn_options(IoDBIConn *self, IoObject *locals,
0
 IoObject *IoDBIConn_optionsClear(IoDBIConn *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("optionsClear", "Clear all options associated with the connection")
0
- */
0
+ //doc DBIConn optionsClear Clear all options associated with the connection
0
+
0
   dbi_conn_clear_options(DATA(self)->conn);
0
   return IONIL(self);
0
 }
0
@@ -180,11 +174,10 @@ IoObject *IoDBIConn_optionsClear(IoDBIConn *self, IoObject *locals,
0
 IoObject *IoDBIConn_optionClear(IoDBIConn *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("optionClear(key)", "Clear a specific option associated with the
0
-connection")
0
- */
0
+ //doc DBIConn optionClear(key) Clear a specific option associated with the connection.
0
+
0
   IoObject *key = IoMessage_locals_valueArgAt_(m, locals, 0);
0
+
0
   if (!ISSYMBOL(key))
0
   {
0
     IoState_error_(IOSTATE, m,
0
@@ -199,9 +192,8 @@ connection")
0
 
0
 IoObject *IoDBIConn_connect(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("connect", "Connect to the database server")
0
- */
0
+ //doc DBIConn connect Connect to the database server.
0
+
0
   if (0 != dbi_conn_connect(DATA(self)->conn))
0
   {
0
     ReportDBIError(DATA(self)->conn, IOSTATE, m);
0
@@ -212,9 +204,8 @@ IoObject *IoDBIConn_connect(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 
0
 IoObject *IoDBIConn_close(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("close", "Close the connection to the database")
0
- */
0
+ //doc DBIConn close Close the connection to the database.
0
+
0
   if (DATA(self)->conn) dbi_conn_close(DATA(self)->conn);
0
   DATA(self)->conn = NULL;
0
   return IONIL(self);
0
@@ -222,19 +213,20 @@ IoObject *IoDBIConn_close(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 
0
 IoObject *IoDBIConn_ping(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("ping", "Ping the database to see if it's alive. Will return
0
-true if it is, otherwise false.")
0
+ /*doc DBIConn ping
0
+ Ping the database to see if it's alive.
0
+ Will return true if it is, otherwise false.
0
   */
0
+
0
   return IOBOOL(self, dbi_conn_ping(DATA(self)->conn) == 1);
0
 }
0
 
0
 IoObject *IoDBIConn_quote(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("quote(value)", "Quote a string value according to the database
0
-server's specifications")
0
+ /*doc DBIConn quote(value)
0
+ Quote a string value according to the database server's specifications.
0
   */
0
+
0
   char *value = NULL, *v2;
0
   size_t newLen;
0
   IoObject *ret;
0
@@ -268,13 +260,14 @@ server's specifications")
0
 
0
 IoObject *IoDBIConn_query(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("query(sql_query)", "Perform a database query returning a DBIResult
0
-object")
0
+ /*doc DBIConn query(sql_query)
0
+ Perform a database query returning a DBIResult object.
0
   */
0
+
0
   dbi_result result;
0
 
0
   IoObject *sql = IoMessage_locals_valueArgAt_(m, locals, 0);
0
+
0
   if (!ISSYMBOL(sql))
0
   {
0
     IoState_error_(IOSTATE, m,
0
@@ -283,9 +276,11 @@ object")
0
   }
0
 
0
   result = dbi_conn_query(DATA(self)->conn, CSTRING(sql));
0
+
0
   if (result == NULL)
0
   {
0
     const char *error;
0
+
0
     int errorCode = dbi_conn_error(DATA(self)->conn, &error);
0
 
0
     IoState_error_(IOSTATE, m, "Could not perform query '%s' "
0
@@ -297,10 +292,11 @@ object")
0
 
0
 IoObject *IoDBIConn_execute(IoDBIConn *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("execute(sql_query)", "Perform a database query that expects no
0
-results. Returns the number of rows affected.")
0
+ /*doc DBIConn execute(sql_query)
0
+ Perform a database query that expects no results.
0
+ Returns the number of rows affected.
0
   */
0
+
0
   dbi_result result;
0
   unsigned long long affectedRows = 0;
0
 
0
@@ -332,10 +328,12 @@ results. Returns the number of rows affected.")
0
 IoObject *IoDBIConn_lastSequence(IoDBIConn *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("sequenceLast([name])", "Return the last inserted sequence value.")
0
+ /*doc DBIConn sequenceLast([name])
0
+ Return the last inserted sequence value.
0
   */
0
+
0
   char *name = NULL;
0
+
0
   if (IoMessage_argCount(m) == 1)
0
   {
0
     IoObject *nameArg = IoMessage_locals_valueArgAt_(m, locals, 0);
0
@@ -357,11 +355,12 @@ IoObject *IoDBIConn_lastSequence(IoDBIConn *self, IoObject *locals,
0
 IoObject *IoDBIConn_nextSequence(IoDBIConn *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("sequenceNext([name])", "Return the next sequence that will be used
0
-during an INSERT query")
0
+ /*doc DBIConn sequenceNext([name])
0
+ Return the next sequence that will be used during an INSERT query.
0
   */
0
+
0
   char *name = NULL;
0
+
0
   if (IoMessage_argCount(m) == 1)
0
   {
0
     IoObject *nameArg = IoMessage_locals_valueArgAt_(m, locals, 0);
...
1
2
3
4
5
6
7
8
 
 
 
 
9
10
11
...
141
142
143
144
145
146
 
 
147
148
149
150
151
152
153
154
155
 
 
156
157
158
...
168
169
170
171
172
173
 
 
174
175
176
...
182
183
184
185
186
187
 
 
188
189
190
...
196
197
198
199
200
201
 
 
202
203
204
...
213
214
215
216
217
218
 
 
219
220
221
...
230
231
232
233
234
235
 
 
236
237
238
...
245
246
247
 
248
249
250
251
252
 
 
253
254
255
...
265
266
267
268
269
 
270
271
272
273
 
 
274
275
276
...
283
284
285
286
287
288
 
 
 
289
290
291
...
316
317
318
319
320
321
322
 
 
 
323
 
324
325
326
...
335
336
337
338
339
340
341
 
 
 
342
343
344
...
360
361
362
363
364
 
 
365
366
367
...
442
443
444
445
446
 
 
447
448
 
449
 
450
451
452
...
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
...
137
138
139
 
 
 
140
141
142
143
144
145
146
147
 
 
 
148
149
150
151
152
...
162
163
164
 
 
 
165
166
167
168
169
...
175
176
177
 
 
 
178
179
180
181
182
...
188
189
190
 
 
 
191
192
193
194
195
...
204
205
206
 
 
 
207
208
209
210
211
...
220
221
222
 
 
 
223
224
225
226
227
...
234
235
236
237
238
239
240
 
 
241
242
243
244
245
...
255
256
257
 
 
258
259
 
 
 
260
261
262
263
264
...
271
272
273
 
 
 
274
275
276
277
278
279
...
304
305
306
 
 
 
 
307
308
309
310
311
312
313
314
...
323
324
325
 
 
 
 
326
327
328
329
330
331
...
347
348
349
 
 
350
351
352
353
354
...
429
430
431
 
 
432
433
434
 
435
436
437
438
439
440
0
@@ -1,11 +1,7 @@
0
-/*#io
0
-DBIResult ioDoc(
0
- docCopyright("Jeremy Cowgar", 2006)
0
- docLicense("BSD revised")
0
- docCategory("Databases")
0
- docObject("DBIResult")
0
- docDescription("A DBI Result created by a call to DBIConn query.")
0
-*/
0
+//metadoc DBIResult copyright Jeremy Cowgar, 2006
0
+//metadoc DBIResult license BSD revised
0
+//metadoc DBIResult category Databases
0
+//metadoc DBIResult description A DBI Result created by a call to DBIConn query.
0
 
0
 #include "IoMessage.h"
0
 #include "IoState.h"
0
@@ -141,18 +137,16 @@ IoObject *IoDBIResult_rowToMap_(void *state, IoDBIResult *self,
0
 IoObject *IoDBIResult_size(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("size", "Returns the number of rows available")
0
- */
0
+ //doc DBIResult size Returns the number of rows available.
0
+
0
   return IONUMBER(dbi_result_get_numrows(DATA(self)->result));
0
 }
0
 
0
 IoObject *IoDBIResult_fields(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("fields", "Returns a list of field names in the result")
0
- */
0
+ //doc DBIResult fields Returns a list of field names in the result.
0
+
0
   int idx;
0
   IoList *list = IOREF(IoList_new(IOSTATE));
0
 
0
@@ -168,9 +162,8 @@ IoObject *IoDBIResult_fields(IoDBIResult *self, IoObject *locals,
0
 IoObject *IoDBIResult_first(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("first", "Move the cursor to the first record")
0
- */
0
+ //doc DBIResult first Move the cursor to the first record.
0
+
0
   if (1 != dbi_result_first_row(DATA(self)->result))
0
   {
0
     ReportDBIError(DATA(self)->conn, IOSTATE, m);
0
@@ -182,9 +175,8 @@ IoObject *IoDBIResult_first(IoDBIResult *self, IoObject *locals,
0
 IoObject *IoDBIResult_previous(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("previous", "Move the cursor to the previous record")
0
- */
0
+ //doc DBIResult previous Move the cursor to the previous record.
0
+
0
   if (1 != dbi_result_prev_row(DATA(self)->result))
0
   {
0
     ReportDBIError(DATA(self)->conn, IOSTATE, m);
0
@@ -196,9 +188,8 @@ IoObject *IoDBIResult_previous(IoDBIResult *self, IoObject *locals,
0
 IoObject *IoDBIResult_next(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("next", "Move the cursor to the next record.")
0
- */
0
+ //doc DBIResult next Move the cursor to the next record.
0
+
0
   dbi_result res = DATA(self)->result;
0
 
0
   if (0 == dbi_result_next_row(res))
0
@@ -213,9 +204,8 @@ IoObject *IoDBIResult_next(IoDBIResult *self, IoObject *locals,
0
 IoObject *IoDBIResult_last(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("last", "Move the cursor to the last record")
0
- */
0
+ //doc DBIResult last Move the cursor to the last record.
0
+
0
   dbi_result res = DATA(self)->result;
0
 
0
   if (0 == dbi_result_last_row(res))
0
@@ -230,9 +220,8 @@ IoObject *IoDBIResult_last(IoDBIResult *self, IoObject *locals,
0
 IoObject *IoDBIResult_seek(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("seek(row_number)", "Move the cursor to the nth record")
0
- */
0
+ //doc DBIResult seek(row_number) Move the cursor to the nth record.
0
+
0
   long rowIdx;
0
   dbi_result res = DATA(self)->result;
0
   IoObject *row = IoMessage_locals_valueArgAt_(m, locals, 0);
0
@@ -245,11 +234,12 @@ IoObject *IoDBIResult_seek(IoDBIResult *self, IoObject *locals,
0
   }
0
 
0
   rowIdx = IoNumber_asLong(row);
0
+
0
   if (1 != dbi_result_seek_row(res, rowIdx))
0
   {
0
     const char *error;
0
- int errorCode = dbi_conn_error(DATA(self)->conn,
0
- &error);
0
+
0
+ int errorCode = dbi_conn_error(DATA(self)->conn, &error);
0
 
0
     if (errorCode == 0)
0
     {
0
@@ -265,12 +255,10 @@ IoObject *IoDBIResult_seek(IoDBIResult *self, IoObject *locals,
0
   return IOBOOL(self, 1);
0
 }
0
 
0
-IoObject *IoDBIResult_position(
0
- IoDBIResult *self, IoObject *locals, IoMessage *m)
0
+IoObject *IoDBIResult_position(IoDBIResult *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("position", "Return the current row's position (or index).")
0
- */
0
+ //doc DBIResult position Return the current row's position (or index).
0
+
0
   unsigned long long rowNum = dbi_result_get_currow(DATA(self)->result);
0
 
0
   if (0 == rowNum)
0
@@ -283,9 +271,9 @@ IoObject *IoDBIResult_position(
0
 
0
 IoObject *IoDBIResult_at(IoDBIResult *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("at(index_or_name)", "Return the contents of the given field. The
0
-parameter can be a field index or a field name.")
0
+ /*doc DBIResult at(index_or_name)
0
+ Returns the contents of the given field.
0
+ The parameter can be a field index or a field name.
0
   */
0
   unsigned int idx = 0;
0
   dbi_result res = DATA(self)->result;
0
@@ -316,11 +304,11 @@ parameter can be a field index or a field name.")
0
 IoObject *IoDBIResult_populate(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("populate(object)", "Populate a decendent of DBIRecord with the
0
-current record's contents. See `DBIRecord' for further explanation and an
0
-example.")
0
+ /*doc DBIResult populate(object)
0
+ Populates a decendent of DBIRecord with the current record's contents.
0
+ See `DBIRecord' for further explanation and an example.
0
   */
0
+
0
   dbi_result res = DATA(self)->result;
0
   IoObject *baseObject = IoMessage_locals_valueArgAt_(m, locals, 0);
0
   IoObject *o = IOCLONE(baseObject);
0
@@ -335,10 +323,9 @@ example.")
0
 IoObject *IoDBIResult_foreach(IoDBIResult *self, IoObject *locals,
0
       IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("foreach([Object], value, message)", """Loops over the records in the
0
-result starting at either the first result (if the cursor has never been
0
-moved) or it's current location if moved. i.e.
0
+/*doc DBIResult foreach([Object], value, message)
0
+Loops over the records in the result starting at either the first result
0
+(if the cursor has never been moved) or it's current location if moved. i.e.
0
 
0
 <pre>
0
 r := conn query("SELECT * FROM people")
0
@@ -360,8 +347,8 @@ The above would start at the record #4, not at the beginning.
0
 The optional Object parameter would cause a decendent of DBIRecord to be
0
 populate instead of the index being set. This allows for advanced
0
 functionality. Please see `DBIRecord' for further information and an example.
0
-""")
0
- */
0
+*/
0
+
0
   dbi_result res = DATA(self)->result;
0
   IoObject *result = IONIL(self);
0
   IoMessage *doMessage;
0
@@ -442,11 +429,12 @@ done:
0
 
0
 IoObject *IoDBIResult_done(IoDBIResult *self, IoObject *locals, IoMessage *m)
0
 {
0
- /*#io
0
- docSlot("done", "Close and free the result. This <b>must</b> be called on
0
+ /*doc DBIResult done
0
+ Close and free the result. This <b>must</b> be called on
0
 each result. Failure to do so will cause memory leaks and open queries with
0
-the database server.")
0
+the database server.
0
   */
0
+
0
   if (0 != dbi_result_free(DATA(self)->result))
0
   {
0
     ReportDBIError(DATA(self)->conn, IOSTATE, m);
...
5
6
7
8
 
9
10
11
...
5
6
7
 
8
9
10
11
0
@@ -5,7 +5,7 @@ Directory fileNamedOrNil := method(path,
0
   if(f exists, f, nil)
0
 )
0
 
0
-Directory setCurrentWorkingDirectory(launchPath)
0
+Directory setCurrentWorkingDirectory(System launchPath)
0
 
0
 project := Project clone
0
 args := System args clone
...
59
60
61
 
62
63
 
64
65
66
...
93
94
95
96
97
 
98
99
100
...
2075
2076
2077
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2078
2079
2080
...
2088
2089
2090
 
 
 
 
 
 
 
 
 
 
 
2091
 
 
 
2092
2093
2094
2095
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2096
2097
2098
...
2101
2102
2103
 
 
 
 
 
 
 
 
 
 
 
 
2104
2105
2106
...
2142
2143
2144
 
 
2145
2146
2147
2148
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2149
2150
2151
...
14684
14685
14686
 
14687
14688
14689
...
14753
14754
14755
 
 
 
 
14756
14757
14758
...
59
60
61
62
63
64
65
66
67
68
...
95
96
97
 
98
99
100
101
102
...
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
...
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
...
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
...
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
...
14919
14920
14921
14922
14923
14924
14925
...
14989
14990
14991
14992
14993
14994
14995
14996
14997
14998
0
@@ -59,8 +59,10 @@
0
 </td><td valign=top>
0
 <div class=indexSection><a href="#Curses">Curses</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#DBI">DBI</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
+<div class=indexItem><a href="#DBI">DBI</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexItem><a href="#DBIConn">DBIConn</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexItem><a href="#DBIRecord">DBIRecord</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
+<div class=indexItem><a href="#DBIResult">DBIResult</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#Fnmatch">Fnmatch</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#Font">Font</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#GLFW">GLFW</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
@@ -93,8 +95,8 @@
0
 <div class=indexSection><a href="#PortAudio">PortAudio</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexItem><a href="#AudioDevice">AudioDevice</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexItem><a href="#AudioMixer">AudioMixer</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
-<div class=indexSection><a href="#Postgres">Postgres</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 </td><td valign=top>
0
+<div class=indexSection><a href="#Postgres">Postgres</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#Python">Python</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#QDBM">QDBM</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
 <div class=indexSection><a href="#Random">Random</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
0
@@ -2075,6 +2077,49 @@ Returns the cursor y position.
0
 </div>
0
 </div>
0
 <hr align=left>
0
+<h2><a name="DBI"></a>DBI</h2>
0
+<div class=indent>
0
+<b>Module:</b> DBI<br>
0
+<div class=slots>
0
+<h3>Slot Index</h3>
0
+<div class=slotIndex>
0
+<a href="#DBI-drivers">drivers</a><br>
0
+<a href="#DBI-initWithDriversPath">initWithDriversPath</a><br>
0
+<a href="#DBI-version">version</a><br>
0
+<a href="#DBI-with">with()</a><br>
0
+</div>
0
+<p>
0
+<h3>Slots</h3>
0
+<p>
0
+<a name="DBI-drivers"></a><b>drivers</b><p>
0
+<div class=slotDescription>
0
+Get a list of drivers and it's associated information:
0
+
0
+ <ol>
0
+ <li>name</li>
0
+ <li>description</li>
0
+ <li>filename</li>
0
+ <li>version</li>
0
+ <li>date compiled</li>
0
+ <li>maintainer</li>
0
+ <li>url</li>
0
+ </ol>
0
+</div>
0
+<a name="DBI-initWithDriversPath"&g