rev |
line source |
jbe@23
|
1
|
jbe@23
|
2 --[[--
|
jbe@23
|
3 db_handle, -- database handle, or nil in case of error
|
jbe@23
|
4 errmsg, -- error message
|
jbe@404
|
5 db_error = -- error object
|
jbe@23
|
6 mondelefant.connect{
|
jbe@40
|
7 conninfo = conninfo, -- string passed directly to PostgreSQL's libpq
|
jbe@23
|
8 host = host, -- hostname or directory with leading slash where Unix-domain socket resides
|
jbe@23
|
9 hostaddr = hostaddr, -- IPv4, or IPv6 address if supported
|
jbe@23
|
10 port = port, -- TCP port or socket file name extension
|
jbe@23
|
11 dbname = dbname, -- name of database to connect with
|
jbe@23
|
12 user = user, -- login name
|
jbe@23
|
13 password = password, -- password
|
jbe@23
|
14 connect_timeout = connect_timeout, -- seconds to wait for connection to be established. Zero or nil means infinite
|
jbe@23
|
15 ...
|
jbe@23
|
16 }
|
jbe@23
|
17
|
jbe@403
|
18 Opens a new database connection and returns a handle for that connection. You may chose to specify host, port, dbname, etc. as seperated arguments, or to use a "conninfo" string, which is directly passed to PostgreSQL's libpq. In the latter case, the "conninfo" string may also be passed directly as first argument to the connect function without supplying a table.
|
jbe@23
|
19
|
jbe@23
|
20 --]]--
|
jbe@23
|
21 -- implemented in mondelefant_native.c as
|
jbe@23
|
22 -- static int mondelefant_connect(lua_State *L)
|
jbe@23
|
23 --//--
|
jbe@23
|
24
|
jbe@23
|
25
|
jbe@23
|
26 --[[--
|
jbe@393
|
27 <db_handle>.fd -- file descriptor of underlaying database connection
|
jbe@393
|
28
|
jbe@393
|
29 The file descriptor number of the underlaying database connection. This value may be used in conjunction with :wait(0) and a select/poll system call to wait for several events at once.
|
jbe@393
|
30
|
jbe@393
|
31 --]]--
|
jbe@393
|
32 -- set/unset in mondelefant_native.c in
|
jbe@393
|
33 -- static int mondelefant_connect(lua_State *L) and
|
jbe@393
|
34 -- static int mondelefant_close(lua_State *L)
|
jbe@393
|
35 --//--
|
jbe@393
|
36
|
jbe@393
|
37
|
jbe@393
|
38 --[[--
|
jbe@23
|
39 <db_handle>:close()
|
jbe@23
|
40
|
jbe@23
|
41 Closes the database connection. This method may be called multiple times and is called automatically when the database handle is garbage collected.
|
jbe@23
|
42
|
jbe@23
|
43 --]]--
|
jbe@23
|
44 -- implemented in mondelefant_native.c as
|
jbe@23
|
45 -- static int mondelefant_conn_close(lua_State *L)
|
jbe@23
|
46 --//--
|
jbe@23
|
47
|
jbe@23
|
48
|
jbe@23
|
49 --[[--
|
jbe@23
|
50 status = -- true, if database connection has no malfunction
|
jbe@23
|
51 <db_handle>:is_ok()
|
jbe@23
|
52
|
jbe@23
|
53 Returns false, if the database connection has a malfunction, otherwise true.
|
jbe@23
|
54
|
jbe@23
|
55 --]]--
|
jbe@23
|
56 -- implemented in mondelefant_native.c as
|
jbe@23
|
57 -- static int mondelefant_conn_is_ok(lua_State *L)
|
jbe@23
|
58 --//--
|
jbe@23
|
59
|
jbe@23
|
60
|
jbe@23
|
61 --[[--
|
jbe@23
|
62 status = -- status string
|
jbe@23
|
63 <db_handle>:get_transaction_status()
|
jbe@23
|
64
|
jbe@23
|
65 Depending on the transaction status of the connection a string is returned:
|
jbe@23
|
66 - idle
|
jbe@23
|
67 - active
|
jbe@23
|
68 - intrans
|
jbe@23
|
69 - inerror
|
jbe@23
|
70 - unknown
|
jbe@23
|
71
|
jbe@23
|
72 --]]--
|
jbe@23
|
73 -- implemented in mondelefant_native.c as
|
jbe@23
|
74 -- static int mondelefant_conn_get_transaction_status(lua_State *L)
|
jbe@23
|
75 --//--
|
jbe@23
|
76
|
jbe@23
|
77
|
jbe@23
|
78 --[[--
|
jbe@397
|
79 db_error, -- error object, or nil in case of success or timeout
|
jbe@397
|
80 channel, -- notification channel name, or nil in case of timeout or no pending notify
|
jbe@397
|
81 payload, -- notification payload string
|
jbe@397
|
82 pid = -- process ID of notifying server process
|
jbe@397
|
83 <db_handle>:try_wait(
|
jbe@397
|
84 timeout -- number of seconds to wait, 0 = do not block, nil = wait infinitely
|
jbe@393
|
85 )
|
jbe@393
|
86
|
jbe@393
|
87 Waits for any NOTIFY event that is being LISTENed for. One or more LISTEN commands must have been sent previously with <db_handle>:query("LISTEN channel_name").
|
jbe@393
|
88
|
jbe@393
|
89 --]]--
|
jbe@393
|
90 -- implemented in mondelefant_native.c as
|
jbe@397
|
91 -- static int mondelefant_conn_try_wait(lua_State *L)
|
jbe@393
|
92 --//--
|
jbe@393
|
93
|
jbe@393
|
94
|
jbe@393
|
95 --[[--
|
jbe@440
|
96 db_list = -- database result being an empty list (or filled list)
|
jbe@440
|
97 <db_handle>:create_list(
|
jbe@440
|
98 tbl -- optional table to be converted to a filled list
|
jbe@440
|
99 )
|
jbe@23
|
100
|
jbe@440
|
101 Creates a database result representing a list. The used meta-table is "result_metatable". The attribute "_connection" is set to the database handle, and the attribute "_type" is set to "list". The attribute "_class" is initialized to the default class prototype "class_prototype" of the module.
|
jbe@23
|
102
|
jbe@23
|
103 --]]--
|
jbe@23
|
104 -- implemented in mondelefant_native.c as
|
jbe@23
|
105 -- static int mondelefant_conn_create_list(lua_State *L)
|
jbe@23
|
106 --//--
|
jbe@23
|
107
|
jbe@23
|
108
|
jbe@23
|
109 --[[--
|
jbe@23
|
110 db_object = -- database result being an empty object (row)
|
jbe@23
|
111 <db_handle>:create_object()
|
jbe@23
|
112
|
jbe@436
|
113 Creates an empty database result representing an object (row). The used meta-table is "result_metatable". The attribute "_connection" is set to the database handle, and the attribute "_type" is set to "object". The attribute "_class" is initialized to the default class prototype "class_prototype" of the module. Additionally the attribute "_col" is set to a proxy table, and the attributes "_data", "_dirty" and "_ref" are initialized with an empty table. TODO: Documentation of _data, _dirty and _ref.
|
jbe@23
|
114
|
jbe@23
|
115 --]]--
|
jbe@23
|
116 -- implemented in mondelefant_native.c as
|
jbe@23
|
117 -- static int mondelefant_conn_create_object(lua_State *L)
|
jbe@23
|
118 --//--
|
jbe@23
|
119
|
jbe@23
|
120
|
jbe@23
|
121 --[[--
|
jbe@23
|
122 quoted_encoded_string = -- encoded and quoted string
|
jbe@23
|
123 <db_handle>:quote_string(
|
jbe@23
|
124 unencoded_string -- string to encode and quote
|
jbe@23
|
125 )
|
jbe@23
|
126
|
jbe@23
|
127 Prepares a string to be used safely within SQL queries. This function is database dependent (see "backslash_quote" server configuration option for PostgreSQL).
|
jbe@23
|
128
|
jbe@23
|
129 --]]--
|
jbe@23
|
130 -- implemented in mondelefant_native.c as
|
jbe@23
|
131 -- static int mondelefant_conn_quote_string(lua_State *L)
|
jbe@23
|
132 --//--
|
jbe@23
|
133
|
jbe@23
|
134
|
jbe@23
|
135 --[[--
|
jbe@23
|
136 quoted_encoded_data = -- encoded and quoted data (as Lua string)
|
jbe@395
|
137 <db_handle>:quote_binary(
|
jbe@23
|
138 raw_data -- data (as Lua string) to encode and quote
|
jbe@23
|
139 )
|
jbe@23
|
140
|
jbe@23
|
141 Prepares a binary string to be used safely within SQL queries (as "bytea" type). This function is database dependent.
|
jbe@23
|
142
|
jbe@23
|
143 --]]--
|
jbe@23
|
144 -- implemented in mondelefant_native.c as
|
jbe@23
|
145 -- static int mondelefant_conn_quote_binary(lua_State *L)
|
jbe@23
|
146 --//--
|
jbe@23
|
147
|
jbe@23
|
148
|
jbe@23
|
149 --[[--
|
jbe@23
|
150 sql_string =
|
jbe@23
|
151 <db_handle>:assemble_command{
|
jbe@23
|
152 template, -- template string
|
jbe@23
|
153 arg1, -- value to be inserted
|
jbe@23
|
154 arg2, -- another value to be inserted
|
jbe@23
|
155 key1 = named_arg3, -- named value
|
jbe@23
|
156 key2 = named_arg4, -- another named value
|
jbe@23
|
157 ...
|
jbe@23
|
158 }
|
jbe@23
|
159
|
jbe@23
|
160 This method returns a SQL command by inserting the given values into the template string. Placeholders are "?" or "$", optionally followed by alphanumeric characters (including underscores). Placeholder characters can be escaped by writing them twice. A question-mark ("?") denotes a single value to be inserted, a dollar-sign ("$") denotes a list of sub-structures to be inserted. If alphanumeric characters are following the placeholder character, then these characters form a key, which is used to lookup the value to be used, otherwise values of numeric indicies are used.
|
jbe@23
|
161
|
jbe@23
|
162 TODO: documentation of input-converters
|
jbe@23
|
163
|
jbe@23
|
164 List of sub-structures are tables with an optional "sep" value, which is used as seperator. Each (numerically indexed) entry of this table is passed to a recursive call of "assemble_command" and concatenated with the given seperator, or ", ", if no seperator is given.
|
jbe@23
|
165
|
jbe@23
|
166 --]]--
|
jbe@23
|
167 -- implemented in mondelefant_native.c as
|
jbe@23
|
168 -- static int mondelefant_conn_assemble_command(lua_State *L)
|
jbe@23
|
169 --//--
|
jbe@23
|
170
|
jbe@23
|
171
|
jbe@23
|
172 --[[--
|
jbe@23
|
173 db_error, -- error object, or nil in case of success
|
jbe@23
|
174 result1, -- result of first command
|
jbe@23
|
175 result2, -- result of second command
|
jbe@23
|
176 ... =
|
jbe@23
|
177 <db_handle>:try_query(
|
jbe@23
|
178 command1, -- first command (to be processed by "assemble_command" method)
|
jbe@23
|
179 mode1, -- mode for first command: "list", "object" or "opt_object"
|
jbe@23
|
180 command2, -- second command (to be processed by "assemble_command" method)
|
jbe@23
|
181 mode2, -- mode for second command: "list", "object" or "opt_object"
|
jbe@23
|
182 ..
|
jbe@23
|
183 )
|
jbe@23
|
184
|
jbe@23
|
185 This method executes one or multiple SQL commands and returns its results. Each command is pre-processed by the "assemble_command" method of the database handle. A mode can be selected for each command: "list" for normal queries, "object" for queries which have exactly one result row, or "opt_object" which have one or zero result rows. If an error occurs, an error object is returned as first result value.
|
jbe@23
|
186
|
jbe@23
|
187 The mode of the last command may be ommitted and default to "list".
|
jbe@23
|
188
|
jbe@23
|
189 --]]--
|
jbe@23
|
190 -- implemented in mondelefant_native.c as
|
jbe@23
|
191 -- static int mondelefant_conn_try_query(lua_State *L)
|
jbe@23
|
192 --//--
|
jbe@23
|
193
|
jbe@23
|
194
|
jbe@23
|
195 --[[--
|
jbe@23
|
196 <db_error>:escalate()
|
jbe@23
|
197
|
jbe@397
|
198 Deprecated alias for error(<db_error>).
|
jbe@397
|
199
|
jbe@397
|
200 Note: Previous versions converted the error object to a string unless the database connection had "error_objects" set to true. The current implementation simply calls error(...). It is deprecated to use this method, use error(...) instead.
|
jbe@23
|
201
|
jbe@23
|
202 --]]--
|
jbe@23
|
203 -- implemented in mondelefant_native.c as
|
jbe@23
|
204 -- static int mondelefant_errorobject_escalate(lua_State *L)
|
jbe@23
|
205 --//--
|
jbe@23
|
206
|
jbe@23
|
207
|
jbe@23
|
208 --[[--
|
jbe@23
|
209 bool = -- true or false
|
jbe@23
|
210 <db_error>:is_kind_of(
|
jbe@23
|
211 error_code -- error code as used by this library
|
jbe@23
|
212 )
|
jbe@23
|
213
|
jbe@23
|
214 Checks, if a given error is of a given kind.
|
jbe@23
|
215
|
jbe@23
|
216 Example:
|
jbe@23
|
217 db_error:is_kind_of("IntegrityConstraintViolation")
|
jbe@23
|
218
|
jbe@23
|
219 --]]--
|
jbe@23
|
220 -- implemented in mondelefant_native.c as
|
jbe@23
|
221 -- static int mondelefant_errorobject_is_kind_of(lua_State *L)
|
jbe@23
|
222 --//--
|
jbe@23
|
223
|
jbe@23
|
224
|
jbe@23
|
225 --[[--
|
jbe@397
|
226 <db_error>.code -- hierarchical error code (separated by dots) in camel case
|
jbe@397
|
227
|
jbe@397
|
228 An error code in camel case notation with dots to separate hierarchy levels, e.g. "IntegrityConstraintViolation.UniqueViolation". See also <db_error>:is_kind_of(...).
|
jbe@397
|
229
|
jbe@397
|
230 --]]--
|
jbe@397
|
231 -- implemented in mondelefant_native.c as
|
jbe@397
|
232 -- static const char *mondelefant_translate_errcode(const char *pgcode)
|
jbe@397
|
233 --//--
|
jbe@397
|
234
|
jbe@397
|
235
|
jbe@397
|
236 --[[--
|
jbe@397
|
237 <db_error>.message -- string which summarizes the error
|
jbe@397
|
238
|
jbe@397
|
239 A string consisting of a single line (without CR/LF) describing the error. For more detailed information on a particular error, additional fields may be set in the <db_error> object. Refer to the source code of the mondelefant_translate_errcode C function in mondelefant_native.c.
|
jbe@397
|
240
|
jbe@397
|
241 --]]--
|
jbe@397
|
242 -- implemented in mondelefant_native.c
|
jbe@397
|
243 --//--
|
jbe@397
|
244
|
jbe@397
|
245
|
jbe@397
|
246 --[[--
|
jbe@397
|
247 channel, -- notification channel name, or nil in case of timeout or no pending notify
|
jbe@397
|
248 payload, -- notification payload string
|
jbe@397
|
249 pid = -- process ID of notifying server process
|
jbe@397
|
250 <db_handle>:wait(
|
jbe@397
|
251 timeout -- number of seconds to wait, 0 = do not block, nil = wait infinitely
|
jbe@397
|
252 )
|
jbe@397
|
253
|
jbe@397
|
254 Same as "try_wait" but raises an error, if a connection error occurred. Timeouts are reported by returning nil as first argument.
|
jbe@397
|
255
|
jbe@397
|
256 --]]--
|
jbe@397
|
257 -- implemented in mondelefant_native.c as
|
jbe@397
|
258 -- static int mondelefant_conn_wait(lua_State *L)
|
jbe@397
|
259 --//--
|
jbe@397
|
260
|
jbe@397
|
261
|
jbe@397
|
262 --[[--
|
jbe@23
|
263 result1, -- result of first command
|
jbe@23
|
264 result2, -- result of second command
|
jbe@23
|
265 ... =
|
jbe@23
|
266 <db_handle>:query(
|
jbe@23
|
267 command1, -- first command (to be processed by "assemble_command" method)
|
jbe@23
|
268 mode1, -- mode for first command: "list", "object" or "opt_object"
|
jbe@23
|
269 command2, -- second command (to be processed by "assemble_command" method)
|
jbe@23
|
270 mode2, -- mode for second command: "list", "object" or "opt_object"
|
jbe@23
|
271 ..
|
jbe@23
|
272 )
|
jbe@23
|
273
|
jbe@23
|
274 Same as "try_query" but raises error, when occurring.
|
jbe@23
|
275
|
jbe@23
|
276 --]]--
|
jbe@23
|
277 -- implemented in mondelefant_native.c as
|
jbe@23
|
278 -- static int mondelefant_conn_query(lua_State *L)
|
jbe@23
|
279 --//--
|
jbe@23
|
280
|
jbe@23
|
281
|
jbe@23
|
282 --[[--
|
jbe@23
|
283 db_list_or_object = -- first argument is returned
|
jbe@23
|
284 mondelefant.set_class(
|
jbe@23
|
285 db_list_or_object, -- database result list or object
|
jbe@23
|
286 db_class -- database class (model)
|
jbe@23
|
287 )
|
jbe@23
|
288
|
jbe@23
|
289 This function sets a class for a given database result list or object. If a result list is given as first argument, the class is also set for all elements of the list.
|
jbe@23
|
290
|
jbe@23
|
291 --]]--
|
jbe@23
|
292 -- implemented in mondelefant_native.c as
|
jbe@23
|
293 -- static int mondelefant_set_class(lua_State *L)
|
jbe@23
|
294 --//--
|
jbe@23
|
295
|
jbe@23
|
296
|
jbe@23
|
297 --[[--
|
jbe@23
|
298 db_class = -- new database class (model)
|
jbe@23
|
299 mondelefant.new_class()
|
jbe@23
|
300
|
jbe@23
|
301 This function creates a new class (model) used for database result lists or objects.
|
jbe@23
|
302
|
jbe@23
|
303 --]]--
|
jbe@23
|
304 -- implemented in mondelefant_native.c as
|
jbe@23
|
305 -- static int mondelefant_new_class(lua_State *L)
|
jbe@23
|
306 --//--
|
jbe@23
|
307
|
jbe@23
|
308
|
jbe@23
|
309 --[[--
|
jbe@23
|
310 reference_data = -- table with reference information
|
jbe@23
|
311 <db_class>:get_reference(
|
jbe@23
|
312 name -- reference name
|
jbe@23
|
313 )
|
jbe@23
|
314
|
jbe@272
|
315 This function performs a lookup for the given name in the "reference" table. Prototypes are used when lookup was unsuccessful.
|
jbe@23
|
316
|
jbe@23
|
317 --]]--
|
jbe@23
|
318 -- implemented in mondelefant_native.c as
|
jbe@23
|
319 -- static int mondelefant_class_get_reference(lua_State *L)
|
jbe@23
|
320 --//--
|
jbe@23
|
321
|
jbe@23
|
322
|
jbe@23
|
323 --[[--
|
jbe@23
|
324 reference_name = -- reference name
|
jbe@23
|
325 <db_class>:get_foreign_key_reference_name(
|
jbe@23
|
326 foreign_key -- foreign key
|
jbe@23
|
327 )
|
jbe@23
|
328
|
jbe@272
|
329 This function performs a lookup for the given name in the "foreign_keys" table. Prototypes are used when lookup was unsuccessful.
|
jbe@23
|
330
|
jbe@23
|
331 --]]--
|
jbe@23
|
332 -- implemented in mondelefant_native.c as
|
jbe@23
|
333 -- static int mondelefant_class_get_reference(lua_State *L)
|
jbe@23
|
334 --//--
|
jbe@23
|
335
|
jbe@416
|
336
|
jbe@416
|
337 --[[--
|
jbe@417
|
338 <db_object>._col -- proxy table mapping column names to their values
|
jbe@416
|
339
|
jbe@417
|
340 This attribute can be used to access column values directly (helpful if <db_class>:document_column is set).
|
jbe@417
|
341
|
jbe@417
|
342 NOTE: Neither pairs(...) nor ipairs(...) are implemented on this proxy table. Use <db_object>._column_info instead.
|
jbe@416
|
343
|
jbe@416
|
344 --]]--
|
jbe@416
|
345 -- implemented in mondelefant_native.c as
|
jbe@416
|
346 -- static const struct luaL_Reg mondelefant_columns_mt_functions[]
|
jbe@416
|
347 --//--
|
jbe@416
|
348
|