From 20bec9e40e9bee14769d71c85de0cc21f8b56c1d Mon Sep 17 00:00:00 2001 From: Stefan de Konink Date: Mon, 13 Oct 2008 01:55:11 +0200 Subject: [PATCH] Creates the legacy code for node/way/relation for incomming data --- handler_osm_put.c | 54 +++++++++++++++++++++++++++++++++++------------------- handler_osm_sql.h | 10 ++++++++-- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/handler_osm_put.c b/handler_osm_put.c index 3390f2b..91ddd75 100644 --- a/handler_osm_put.c +++ b/handler_osm_put.c @@ -23,6 +23,7 @@ static void do_members(cherokee_handler_osm_t *hdl, axlNode *node, unsigned long axlNode * member; if ((member = axl_node_get_first_child(node)) != NULL) { cherokee_buffer_t members_node = CHEROKEE_BUF_INIT; + cherokee_buffer_t members_way = CHEROKEE_BUF_INIT; cherokee_buffer_t members_relation = CHEROKEE_BUF_INIT; unsigned long int idx = 0; do { @@ -40,23 +41,35 @@ static void do_members(cherokee_handler_osm_t *hdl, axlNode *node, unsigned long cherokee_buffer_add_va (&members_node, "%lu, ", ref); cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; if (update == 1) { - cherokee_buffer_add_va (&sql1, "UPDATE members_node SET to_node = %lu, role = '%s' WHERE relation = %lu AND idx = %lu", ref, role, relationid, idx); + cherokee_buffer_add_va (&sql1, "UPDATE relation_members_node SET to_node = %lu, role = '%s' WHERE relation = %lu AND idx = %lu", ref, role, relationid, idx); } if (update == 0 || run_sql(hdl, &sql1, NULL, node_update_or_insert) == ret_error) { cherokee_buffer_mrproper(&sql1); - cherokee_buffer_add_va (&sql1, "INSERT INTO members_node (relation, idx, to_node, role) VALUES (%lu, %lu, %lu, '%s')", relationid, idx, ref, role); + cherokee_buffer_add_va (&sql1, "INSERT INTO relation_members_node (relation, idx, to_node, role) VALUES (%lu, %lu, %lu, '%s')", relationid, idx, ref, role); run_sql(hdl, &sql1, NULL, NULL); } cherokee_buffer_mrproper(&sql1); - } else if (strcmp(type, "way") == 0 || strcmp(type, "relation") == 0) { + } else if (strcmp(type, "way") == 0) { + cherokee_buffer_add_va (&members_way, "%lu, ", ref); + cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; + if (update == 1) { + cherokee_buffer_add_va (&sql1, "UPDATE relation_members_way SET to_way = %lu, role = '%s' WHERE relation = %lu AND idx = %lu", ref, role, relationid, idx); + } + if (update == 0 || run_sql(hdl, &sql1, NULL, node_update_or_insert) == ret_error) { + cherokee_buffer_mrproper(&sql1); + cherokee_buffer_add_va (&sql1, "INSERT INTO relation_members_way (relation, idx, to_way, role) VALUES (%lu, %lu, %lu, '%s')", relationid, idx, ref, role); + run_sql(hdl, &sql1, NULL, NULL); + } + cherokee_buffer_mrproper(&sql1); + } else if (strcmp(type, "relation") == 0) { cherokee_buffer_add_va (&members_relation, "%lu, ", ref); cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; if (update == 1) { - cherokee_buffer_add_va (&sql1, "UPDATE members_relation SET to_relation = %lu, role = '%s' WHERE relation = %lu AND idx = %lu", ref, role, relationid, idx); + cherokee_buffer_add_va (&sql1, "UPDATE relation_members_relation SET to_relation = %lu, role = '%s' WHERE relation = %lu AND idx = %lu", ref, role, relationid, idx); } if (update == 0 || run_sql(hdl, &sql1, NULL, node_update_or_insert) == ret_error) { cherokee_buffer_mrproper(&sql1); - cherokee_buffer_add_va (&sql1, "INSERT INTO members_relation (relation, idx, to_relation, role) VALUES (%lu, %lu, %lu, '%s')", relationid, idx, ref, role); + cherokee_buffer_add_va (&sql1, "INSERT INTO relation_members_relation (relation, idx, to_relation, role) VALUES (%lu, %lu, %lu, '%s')", relationid, idx, ref, role); run_sql(hdl, &sql1, NULL, NULL); } cherokee_buffer_mrproper(&sql1); @@ -71,16 +84,25 @@ static void do_members(cherokee_handler_osm_t *hdl, axlNode *node, unsigned long if (members_node.len > 0) { cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; cherokee_buffer_drop_ending(&members_node, 2); - cherokee_buffer_add_va (&sql1, "DELETE FROM members_node WHERE relation = %lu AND to_node NOT IN (%s)", relationid, members_node.buf); + cherokee_buffer_add_va (&sql1, "DELETE FROM relation_members_node WHERE relation = %lu AND to_node NOT IN (%s)", relationid, members_node.buf); run_sql(hdl, &sql1, NULL, NULL); cherokee_buffer_mrproper(&sql1); } cherokee_buffer_mrproper(&members_node); + + if (members_way.len > 0) { + cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; + cherokee_buffer_drop_ending(&members_way, 2); + cherokee_buffer_add_va (&sql1, "DELETE FROM relation_members_way WHERE relation = %lu AND to_way NOT IN (%s)", relationid, members_way.buf); + run_sql(hdl, &sql1, NULL, NULL); + cherokee_buffer_mrproper(&sql1); + } + cherokee_buffer_mrproper(&members_way); if (members_relation.len > 0) { cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; cherokee_buffer_drop_ending(&members_relation, 2); - cherokee_buffer_add_va (&sql1, "DELETE FROM members_relation WHERE relation = %lu AND to_relation NOT IN (%s)", relationid, members_relation.buf); + cherokee_buffer_add_va (&sql1, "DELETE FROM relation_members_relation WHERE relation = %lu AND to_relation NOT IN (%s)", relationid, members_relation.buf); run_sql(hdl, &sql1, NULL, NULL); cherokee_buffer_mrproper(&sql1); } @@ -105,11 +127,11 @@ static void do_nds(cherokee_handler_osm_t *hdl, axlNode *node, unsigned long int cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; if (update == 1) { - cherokee_buffer_add_va (&sql1, "UPDATE members_node SET to_node = %lu WHERE relation = %lu AND idx = %lu", ref, wayid, idx); + cherokee_buffer_add_va (&sql1, "UPDATE way_nds SET to_node = %lu WHERE way = %lu AND idx = %lu", ref, wayid, idx); } if (update == 0 || run_sql(hdl, &sql1, NULL, node_update_or_insert) == ret_error) { cherokee_buffer_mrproper(&sql1); - cherokee_buffer_add_va (&sql1, "INSERT INTO members_node (relation, idx, to_node, role) VALUES (%lu, %lu, %lu, 'way')", wayid, idx, ref); + cherokee_buffer_add_va (&sql1, "INSERT INTO way_nds (way, idx, to_node) VALUES (%lu, %lu, %lu)", wayid, idx, ref); run_sql(hdl, &sql1, NULL, NULL); } cherokee_buffer_mrproper(&sql1); @@ -121,15 +143,9 @@ static void do_nds(cherokee_handler_osm_t *hdl, axlNode *node, unsigned long int if (nds.len > 0) { cherokee_buffer_t sql1 = CHEROKEE_BUF_INIT; cherokee_buffer_drop_ending(&nds, 2); - cherokee_buffer_add_va (&sql1, "DELETE FROM members_node WHERE relation = %lu AND to_node NOT IN (%s)", wayid, nds.buf); + cherokee_buffer_add_va (&sql1, "DELETE FROM way_nds WHERE relation = %lu AND to_node NOT IN (%s)", wayid, nds.buf); run_sql(hdl, &sql1, NULL, NULL); cherokee_buffer_mrproper(&sql1); - - if (update == 0) { - cherokee_buffer_add_va (&sql1, "INSERT INTO relation_tags (relation, k, v) VALUES (%lu, 'type', 'way')", wayid); - run_sql(hdl, &sql1, NULL, NULL); - cherokee_buffer_mrproper(&sql1); - } } cherokee_buffer_mrproper(&nds); @@ -273,7 +289,7 @@ cherokee_handler_osm_init_put (cherokee_handler_osm_t *hdl) run_sql(hdl, &sql1, NULL, NULL); cherokee_buffer_mrproper(&sql1); - do_tags(hdl, node, nodeid, 1, SQL_RELATION_CREATE_NODE_TAG, SQL_RELATION_UPDATE_NODE_TAG, SQL_WAY_DELETE_NODE_TAG); + do_tags(hdl, node, nodeid, 1, SQL_WAY_CREATE_NODE_TAG, SQL_WAY_UPDATE_NODE_TAG, SQL_WAY_DELETE_NODE_TAG); do_nds(hdl, node, nodeid, 1); /* this sequence otherwise we screw up type = */ cherokee_buffer_add_str (&sql1, SQL_TRANSACTION_COMMIT); @@ -347,7 +363,7 @@ cherokee_handler_osm_init_put (cherokee_handler_osm_t *hdl) run_sql(hdl, &sql1, buf, NULL); cherokee_buffer_mrproper(&sql1); - cherokee_buffer_add_va (&sql1, SQL_RELATION_CREATE, 0); + cherokee_buffer_add_va (&sql1, SQL_WAY_CREATE, 0); run_sql(hdl, &sql1, buf, result_node_last_id); cherokee_buffer_mrproper(&sql1); @@ -356,7 +372,7 @@ cherokee_handler_osm_init_put (cherokee_handler_osm_t *hdl) if (errno != ERANGE && testid > 0) { nodeid = testid; - do_tags(hdl, node, nodeid, 0, SQL_RELATION_CREATE_NODE_TAG, SQL_RELATION_UPDATE_NODE_TAG, SQL_RELATION_DELETE_NODE_TAG); + do_tags(hdl, node, nodeid, 0, SQL_WAY_CREATE_NODE_TAG, SQL_WAY_UPDATE_NODE_TAG, SQL_WAY_DELETE_NODE_TAG); do_nds(hdl, node, nodeid, 0); /* this sequence otherwise we screw up type= */ cherokee_buffer_add_str (&sql1, SQL_TRANSACTION_COMMIT); diff --git a/handler_osm_sql.h b/handler_osm_sql.h index bcf2dc3..2f8cd7f 100644 --- a/handler_osm_sql.h +++ b/handler_osm_sql.h @@ -82,8 +82,14 @@ #define SQL_RELATION_CREATE_NODE_TAG "INSERT INTO relation_tags (relation, k, v) VALUES (%d, '%s', '%s')" #define SQL_RELATION_UPDATE_NODE_TAG "UPDATE relation_tags SET v = '%s' WHERE relation = %d AND k = '%s'" #define SQL_RELATION_DELETE_NODE_TAG "DELETE FROM relation_tags WHERE relation = %d AND k NOT IN (%s)" - #define SQL_WAY_DELETE_NODE_TAG "DELETE FROM relation_tags WHERE relation = %d AND k NOT IN ('type', %s)" - + + #define SQL_WAY_CREATE "INSERT INTO ways (username) VALUES (%lu)" + #define SQL_WAY_UPDATE "UPDATE ways SET username = %d WHERE id = %lu" + #define SQL_WAY_CREATE_NODE_TAG "INSERT INTO way_tags (way, k, v) VALUES (%d, '%s', '%s')" + #define SQL_WAY_UPDATE_NODE_TAG "UPDATE way_tags SET v = '%s' WHERE way = %d AND k = '%s'" + #define SQL_WAY_DELETE_NODE_TAG "DELETE FROM way_tags WHERE way = %d AND k NOT IN (%s)" + + #define SQL_TRANSACTION_START "START TRANSACTION" #define SQL_TRANSACTION_COMMIT "COMMIT" #define SQL_TRANSACTION_ROLLBACK "ROLLBACK" -- 2.11.4.GIT