1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#include <kore/kore.h>
#include <kore/http.h>
#include <kore/pgsql.h>
#include "assets.h"
int init(int);
int page(struct http_request *);
/* Called when our module is loaded (see config) */
int init(int state)
{
/* Register our database. */
int err = kore_pgsql_register(
"db",
"host=127.0.0.1 port=5432 user=postgres password=p0stgres dbname=clog sslmode=disable"
);
return (err);
}
int page(struct http_request *req)
{
struct kore_buf *buf;
buf = kore_buf_alloc(4096);
kore_buf_append(buf, asset_index_begin_html, asset_len_index_begin_html);
// SQL vars
struct kore_pgsql sql;
int row, rows;
// Results
char *id;
char *title, *body;
/* req->status = HTTP_STATUS_INTERNAL_ERROR; */
kore_pgsql_init(&sql);
/*
* Initialise our kore_pgsql data structure with the database name
* we want to connect to (note that we registered this earlier with
* kore_pgsql_register()). We also say we will perform a synchronous
* query (KORE_PGSQL_SYNC).
*/
int err = kore_pgsql_setup(&sql, "db", KORE_PGSQL_SYNC);
kore_log(LOG_ERR, "kore_pgsql_setup: %d", err);
if (!err)
{
kore_pgsql_logerror(&sql);
goto out;
}
/*
* Now we can fire off the query, once it returns we either have
* a result on which we can operate or an error occurred.
*/
if (!kore_pgsql_query(&sql, "SELECT id, title, body FROM entries")) {
kore_pgsql_logerror(&sql);
goto out;
}
/*
* Iterate over the result and dump it to somewhere.
*/
rows = kore_pgsql_ntuples(&sql);
for (row = 0; row < rows; row++) {
id = kore_pgsql_getvalue(&sql, row, 0);
title = kore_pgsql_getvalue(&sql, row, 1);
body = kore_pgsql_getvalue(&sql, row, 2);
kore_log(LOG_NOTICE, "id: '%s'", id);
kore_log(LOG_NOTICE, "title: '%s'", title);
kore_log(LOG_NOTICE, "body: '%s'", body);
kore_buf_appendf(buf, "\t<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n", id, title, body);
}
out: ;
kore_buf_append(buf, asset_index_end_html, asset_len_index_end_html);
http_response_header(req, "content-type", "text/html; charset=utf-8");
http_response(req, HTTP_STATUS_OK, buf->data, buf->offset);
// http_response_stream ???
kore_buf_free(buf);
/* Don't forget to cleanup the kore_pgsql data structure. */
kore_pgsql_cleanup(&sql);
return (KORE_RESULT_OK);
}
|