Big update I guess ;)
[handlerosm.git] / handler_osm_delete.c
blobcc778ac9b9be4413cb211006cd32196649590525
1 #include <cherokee/cherokee.h>
2 #include <Mapi.h>
4 #include "handler_osm.h"
5 #include "handler_osm_db.h"
6 #include "handler_osm_delete.h"
7 #include "handler_osm_sql.h"
9 static ret_t delete_object_by_id(cherokee_handler_osm_t *hdl, unsigned long int id, osm_state_delete_t state);
11 ret_t
12 cherokee_handler_osm_init_delete (cherokee_handler_osm_t *hdl) {
13 ret_t ret = ret_error;
14 osm_state_delete_t state = OSM_DELETE_FIRST;
15 cherokee_connection_t *conn = HANDLER_CONN(hdl);
16 char *string = conn->request.buf;
17 char *token;
19 while (state != OSM_DELETE_DONE && (token = (char *) strsep( &string , "/")) != NULL) {
20 if (*token == '\0')
21 continue;
23 switch (state) {
24 case OSM_DELETE_FIRST:
25 switch (token[0]) {
26 case 'n':
27 state = OSM_DELETE_NODE_ID;
28 break;
29 case 'w':
30 state = OSM_DELETE_WAY_ID;
31 break;
32 case 'r':
33 state = OSM_DELETE_RELATION_ID;
34 break;
36 break;
38 case OSM_DELETE_NODE_ID:
39 case OSM_DELETE_WAY_ID:
40 case OSM_DELETE_RELATION_ID: {
41 unsigned long id = 0;
42 id = strtoul(token, (char **) NULL, 10);
43 if (errno != ERANGE) {
44 state++;
45 ret = delete_object_by_id(hdl, id, state);
46 } else
47 state = OSM_DELETE_DONE;
48 break;
50 default:
51 ret = ret_error;
55 return ret;
58 static ret_t
59 delete_object_by_id(cherokee_handler_osm_t *hdl, unsigned long int id, osm_state_delete_t state) {
60 ret_t ret;
61 cherokee_buffer_t sql = CHEROKEE_BUF_INIT;
62 switch (state) {
63 case OSM_DELETE_NODE_COMMAND:
64 cherokee_buffer_add_va (&sql, SQL_DELETE_NODE_BY_ID, id);
65 ret = run_sql(hdl, &sql, NULL, NULL);
66 break;
68 case OSM_DELETE_WAY_COMMAND:
69 cherokee_buffer_add_va (&sql, SQL_DELETE_RELATION_BY_ID, id);
70 ret = run_sql(hdl, &sql, NULL, NULL);
71 break;
73 case OSM_DELETE_RELATION_COMMAND:
74 cherokee_buffer_add_va (&sql, SQL_DELETE_RELATION_BY_ID, id);
75 ret = run_sql(hdl, &sql, NULL, NULL);
76 break;
77 default:
78 ret = ret_error;
80 cherokee_buffer_mrproper(&sql);
81 return ret;