mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
Allow mod_lua to supply a database result with named rows instead of only numeric indexes.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1570528 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
3
CHANGES
3
CHANGES
@@ -1,6 +1,9 @@
|
|||||||
-*- coding: utf-8 -*-
|
-*- coding: utf-8 -*-
|
||||||
Changes with Apache 2.5.0
|
Changes with Apache 2.5.0
|
||||||
|
|
||||||
|
*) mod_lua: Allow for database results to be returned as a hash with
|
||||||
|
row-name/value pairs instead of just row-number/value.
|
||||||
|
|
||||||
*) mod_rewrite: Add RewriteOptions InheritDown, InheritDownBefore,
|
*) mod_rewrite: Add RewriteOptions InheritDown, InheritDownBefore,
|
||||||
and IgnoreInherit to allow RewriteRules to be pushed from parent scopes
|
and IgnoreInherit to allow RewriteRules to be pushed from parent scopes
|
||||||
to child scopes without explicitly configuring each child scope.
|
to child scopes without explicitly configuring each child scope.
|
||||||
|
@@ -1208,6 +1208,7 @@ local result, err = db:select(r, "SELECT * FROM `tbl` WHERE 1")
|
|||||||
local rows = result(0) -- Fetch ALL rows synchronously
|
local rows = result(0) -- Fetch ALL rows synchronously
|
||||||
local row = result(-1) -- Fetch the next available row, asynchronously
|
local row = result(-1) -- Fetch the next available row, asynchronously
|
||||||
local row = result(1234) -- Fetch row number 1234, asynchronously
|
local row = result(1234) -- Fetch row number 1234, asynchronously
|
||||||
|
local row = result(-1, true) -- Fetch the next available row, using row names as key indexes.
|
||||||
</highlight>
|
</highlight>
|
||||||
<p>One can construct a function that returns an iterative function to iterate over all rows
|
<p>One can construct a function that returns an iterative function to iterate over all rows
|
||||||
in a synchronous or asynchronous way, depending on the async argument:
|
in a synchronous or asynchronous way, depending on the async argument:
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "mod_lua.h"
|
#include "mod_lua.h"
|
||||||
#include "lua_dbd.h"
|
#include "lua_dbd.h"
|
||||||
|
|
||||||
@@ -228,15 +229,19 @@ int lua_db_escape(lua_State *L)
|
|||||||
*/
|
*/
|
||||||
int lua_db_get_row(lua_State *L)
|
int lua_db_get_row(lua_State *L)
|
||||||
{
|
{
|
||||||
int row_no,x;
|
int row_no,x,alpha = 0;
|
||||||
const char *entry;
|
const char *entry, *rowname;
|
||||||
apr_dbd_row_t *row = 0;
|
apr_dbd_row_t *row = 0;
|
||||||
lua_db_result_set *res = lua_get_result_set(L);
|
lua_db_result_set *res = lua_get_result_set(L);
|
||||||
|
|
||||||
row_no = luaL_optinteger(L, 2, 0);
|
row_no = luaL_optinteger(L, 2, 0);
|
||||||
|
if (lua_isboolean(L, 3)) {
|
||||||
|
alpha = lua_toboolean(L, 3);
|
||||||
|
}
|
||||||
lua_settop(L,0);
|
lua_settop(L,0);
|
||||||
|
|
||||||
/* Fetch all rows at once? */
|
/* Fetch all rows at once? */
|
||||||
|
|
||||||
if (row_no == 0) {
|
if (row_no == 0) {
|
||||||
row_no = 1;
|
row_no = 1;
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
@@ -248,7 +253,14 @@ int lua_db_get_row(lua_State *L)
|
|||||||
for (x = 0; x < res->cols; x++) {
|
for (x = 0; x < res->cols; x++) {
|
||||||
entry = apr_dbd_get_entry(res->driver, row, x);
|
entry = apr_dbd_get_entry(res->driver, row, x);
|
||||||
if (entry) {
|
if (entry) {
|
||||||
lua_pushinteger(L, x + 1);
|
if (alpha == 1) {
|
||||||
|
rowname = apr_dbd_get_name(res->driver,
|
||||||
|
res->results, x);
|
||||||
|
lua_pushstring(L, rowname ? rowname : "(oob)");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lua_pushinteger(L, x + 1);
|
||||||
|
}
|
||||||
lua_pushstring(L, entry);
|
lua_pushstring(L, entry);
|
||||||
lua_rawset(L, -3);
|
lua_rawset(L, -3);
|
||||||
}
|
}
|
||||||
@@ -268,7 +280,14 @@ int lua_db_get_row(lua_State *L)
|
|||||||
for (x = 0; x < res->cols; x++) {
|
for (x = 0; x < res->cols; x++) {
|
||||||
entry = apr_dbd_get_entry(res->driver, row, x);
|
entry = apr_dbd_get_entry(res->driver, row, x);
|
||||||
if (entry) {
|
if (entry) {
|
||||||
lua_pushinteger(L, x + 1);
|
if (alpha == 1) {
|
||||||
|
rowname = apr_dbd_get_name(res->driver,
|
||||||
|
res->results, x);
|
||||||
|
lua_pushstring(L, rowname ? rowname : "(oob)");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lua_pushinteger(L, x + 1);
|
||||||
|
}
|
||||||
lua_pushstring(L, entry);
|
lua_pushstring(L, entry);
|
||||||
lua_rawset(L, -3);
|
lua_rawset(L, -3);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user