+ MYSQL_STMT *way_tags;
+ const char
+ way_tags_stmt[] = "SELECT k, v FROM current_way_segments INNER JOIN "
+ "current_way_tags ON current_way_segments.id = "
+ "current_way_tags.id WHERE segment_id = ?";
+ char *wk, *wv;
+ const size_t max_tag_len = 1 << 16;
+ long long mysql_seg_id;
+ unsigned long res_len;
+ my_bool res_error;
+ MYSQL_BIND in_bind[1], out_bind[1];
+
+ /* F***ing libmysql only support fixed size buffers for string results of
+ * prepared statements. So allocate 65k for the tag key and the tag value
+ * and hope it'll suffice. */
+ wk = (char *) malloc(max_tag_len);
+ wv = (char *) malloc(max_tag_len);
+
+ way_tags = mysql_stmt_init(d->mysql2);
+ if (!way_tags) exit_mysql_err(d->mysql2);
+ if (mysql_stmt_prepare(way_tags, way_tags_stmt, sizeof(way_tags_stmt)))
+ exit_stmt_err(way_tags);
+
+ memset(in_bind, 0, sizeof(in_bind));
+ in_bind[0].buffer_type = MYSQL_TYPE_LONGLONG;
+ in_bind[0].buffer = (char *) &mysql_seg_id;
+ in_bind[0].is_null = 0;
+ in_bind[0].length = 0;
+
+ if (mysql_stmt_bind_param(way_tags, in_bind))
+ exit_stmt_err(way_tags);
+
+ memset(out_bind, 0, sizeof(out_bind));
+ out_bind[0].buffer_type = MYSQL_TYPE_STRING;
+ out_bind[0].buffer = wk;
+ out_bind[0].is_null = 0;
+ out_bind[0].length = &res_len;
+ out_bind[0].error = &res_error;
+ out_bind[0].buffer_length = max_tag_len;
+ out_bind[1].buffer_type = MYSQL_TYPE_STRING;
+ out_bind[1].buffer = wv;
+ out_bind[1].is_null = 0;
+ out_bind[1].length = &res_len;
+ out_bind[1].error = &res_error;
+ out_bind[1].buffer_length = max_tag_len;
+ if (mysql_stmt_bind_result(way_tags, out_bind))
+ exit_stmt_err(way_tags);