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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
/**
* SPDX-License-Identifier: GPL-2.0-or-later
*
* This file is part of osm2pgsql (https://osm2pgsql.org/).
*
* Copyright (C) 2006-2025 by the osm2pgsql developer community.
* For a full list of authors see the git log.
*/
#include <catch.hpp>
#include "common-import.hpp"
#include "common-options.hpp"
namespace {
testing::db::import_t db;
char const *const CONF_FILE = "test_output_flex_relations.lua";
} // anonymous namespace
TEST_CASE("add relations")
{
options_t options = testing::opt_t().slim().flex(CONF_FILE);
REQUIRE_NOTHROW(db.run_import(options, "r30 v1 dV\n"
"r31 v1 dV Tt1=yes\n"
"r32 v1 dV Tt2=yes\n"
"r33 v1 dV Tt1=yes,t2=yes\n"));
auto conn = db.db().connect();
CHECK(2 == conn.get_count("osm2pgsql_test_t1"));
CHECK(2 == conn.get_count("osm2pgsql_test_t2"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 31"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 33"));
options.append = true;
REQUIRE_NOTHROW(db.run_import(options, "r34 v1 dV\n"
"r35 v1 dV Tt1=yes\n"
"r36 v1 dV Tt2=yes\n"
"r37 v1 dV Tt1=yes,t2=yes\n"));
CHECK(4 == conn.get_count("osm2pgsql_test_t1"));
CHECK(4 == conn.get_count("osm2pgsql_test_t2"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 31"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 33"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 35"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 37"));
}
TEST_CASE("change relations")
{
options_t options = testing::opt_t().slim().flex(CONF_FILE);
REQUIRE_NOTHROW(db.run_import(options, "r30 v1 dV\n"
"r31 v1 dV Tt1=yes\n"
"r32 v1 dV Tt2=yes\n"
"r33 v1 dV Tt1=yes,t2=yes\n"
"r34 v1 dV\n"
"r35 v1 dV Tt1=yes\n"
"r36 v1 dV Tt1=yes,t2=yes\n"));
options.append = true;
auto conn = db.db().connect();
CHECK(4 == conn.get_count("osm2pgsql_test_t1"));
CHECK(3 == conn.get_count("osm2pgsql_test_t2"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 31"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 33"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 35"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 36"));
SECTION("no tag, add tag t1")
{
REQUIRE_NOTHROW(db.run_import(options, "r34 v2 dV Tt1=yes\n"));
CHECK(5 == conn.get_count("osm2pgsql_test_t1"));
CHECK(3 == conn.get_count("osm2pgsql_test_t2"));
}
SECTION("no tag, add tag t1, t2")
{
REQUIRE_NOTHROW(db.run_import(options, "r34 v2 dV Tt1=yes,t2=yes\n"));
CHECK(5 == conn.get_count("osm2pgsql_test_t1"));
CHECK(4 == conn.get_count("osm2pgsql_test_t2"));
}
SECTION("one tag, remove tag t1")
{
REQUIRE_NOTHROW(db.run_import(options, "r35 v2 dV\n"));
CHECK(3 == conn.get_count("osm2pgsql_test_t1"));
CHECK(3 == conn.get_count("osm2pgsql_test_t2"));
}
SECTION("one tag, change tag t1 to t2")
{
REQUIRE_NOTHROW(db.run_import(options, "r35 v2 dV Tt2=yes\n"));
CHECK(3 == conn.get_count("osm2pgsql_test_t1"));
CHECK(4 == conn.get_count("osm2pgsql_test_t2"));
}
SECTION("one tag, add tag t2")
{
REQUIRE_NOTHROW(db.run_import(options, "r35 v2 dV Tt1=yes,t2=yes\n"));
CHECK(4 == conn.get_count("osm2pgsql_test_t1"));
CHECK(4 == conn.get_count("osm2pgsql_test_t2"));
}
SECTION("two tags, remove tag t1 and t2")
{
REQUIRE_NOTHROW(db.run_import(options, "r36 v2 dV\n"));
CHECK(3 == conn.get_count("osm2pgsql_test_t1"));
CHECK(2 == conn.get_count("osm2pgsql_test_t2"));
}
SECTION("two tags, remove only tag t1 not t2")
{
REQUIRE_NOTHROW(db.run_import(options, "r36 v2 dV Tt2=yes\n"));
CHECK(3 == conn.get_count("osm2pgsql_test_t1"));
CHECK(3 == conn.get_count("osm2pgsql_test_t2"));
}
}
TEST_CASE("delete relation")
{
options_t options = testing::opt_t().slim().flex(CONF_FILE);
REQUIRE_NOTHROW(db.run_import(options, "r30 v1 dV\n"
"r31 v1 dV Tt1=yes\n"
"r32 v1 dV Tt2=yes\n"
"r33 v1 dV Tt1=yes,t2=yes\n"
"r34 v1 dV\n"
"r35 v1 dV Tt1=yes\n"
"r36 v1 dV Tt1=yes,t2=yes\n"));
options.append = true;
auto conn = db.db().connect();
CHECK(4 == conn.get_count("osm2pgsql_test_t1"));
CHECK(3 == conn.get_count("osm2pgsql_test_t2"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 31"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 33"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 35"));
CHECK(1 == conn.get_count("osm2pgsql_test_t1", "relation_id = 36"));
REQUIRE_NOTHROW(db.run_import(options, "r34 v2 dD\n"
"r35 v2 dD\n"
"r36 v2 dD\n"));
CHECK(2 == conn.get_count("osm2pgsql_test_t1"));
CHECK(2 == conn.get_count("osm2pgsql_test_t2"));
}
|