1010#include " expire-output.hpp"
1111
1212#include " format.hpp"
13- #include " geom.hpp"
14- #include " hex.hpp"
1513#include " logging.hpp"
1614#include " pgsql.hpp"
1715#include " tile.hpp"
18- #include " wkb.hpp"
1916
2017#include < cerrno>
2118#include < system_error>
@@ -53,43 +50,10 @@ void expire_output_t::add_tiles(
5350 m_tiles.insert (dirty_tiles.cbegin (), dirty_tiles.cend ());
5451}
5552
56- void expire_output_t::add_endpoints (geom::geometry_t const &geom)
57- {
58- auto const add_line = [this ](geom::linestring_t const &line) {
59- if (line.empty ()) {
60- return ;
61- }
62- auto const &first = line.front ();
63- auto const &last = line.back ();
64- m_endpoints.emplace (first.x (), first.y ());
65- m_endpoints.emplace (last.x (), last.y ());
66- };
67-
68- std::lock_guard<std::mutex> const guard{*m_tiles_mutex};
69-
70- m_endpoint_srid = geom.srid ();
71- if (geom.is_linestring ()) {
72- add_line (geom.get <geom::linestring_t >());
73- } else if (geom.is_multilinestring ()) {
74- for (auto const &line : geom.get <geom::multilinestring_t >()) {
75- add_line (line);
76- }
77- }
78- }
79-
8053bool expire_output_t::empty () noexcept
8154{
8255 std::lock_guard<std::mutex> const guard{*m_tiles_mutex};
83- return m_tiles.empty () && m_endpoints.empty ();
84- }
85-
86- std::vector<std::pair<double , double >> expire_output_t::get_endpoints ()
87- {
88- std::lock_guard<std::mutex> const guard{*m_tiles_mutex};
89- std::vector<std::pair<double , double >> endpoints (m_endpoints.cbegin (),
90- m_endpoints.cend ());
91- m_endpoints.clear ();
92- return endpoints;
56+ return m_tiles.empty ();
9357}
9458
9559quadkey_list_t expire_output_t::get_tiles ()
@@ -115,9 +79,6 @@ expire_output_t::output(connection_params_t const &connection_params)
11579 if (!m_table.empty ()) {
11680 num = output_tiles_to_table (get_tiles (), connection_params);
11781 }
118- if (!m_endpoint_table.empty ()) {
119- num += output_endpoints_to_table (get_endpoints (), connection_params);
120- }
12182 return num;
12283}
12384
@@ -179,58 +140,16 @@ std::size_t expire_output_t::output_tiles_to_table(
179140 return count;
180141}
181142
182- std::size_t expire_output_t::output_endpoints_to_table (
183- std::vector<std::pair<double , double >> const &endpoints,
184- connection_params_t const &connection_params) const
185- {
186- if (endpoints.empty ()) {
187- return 0 ;
188- }
189-
190- auto const qn = qualified_name (m_schema, m_endpoint_table);
191-
192- pg_conn_t const db_connection{connection_params, " expire" };
193-
194- // COPY is significantly faster than individual INSERTs.
195- db_connection.copy_start (fmt::format (" COPY {} (geom) FROM STDIN" , qn));
196-
197- std::string buffer;
198- for (auto const &[x, y] : endpoints) {
199- geom::geometry_t const point{geom::point_t {x, y}, m_endpoint_srid};
200- buffer += util::encode_hex (geom_to_ewkb (point));
201- buffer += ' \n ' ;
202- if (buffer.size () >= 65536 ) {
203- db_connection.copy_send (buffer, qn);
204- buffer.clear ();
205- }
206- }
207- if (!buffer.empty ()) {
208- db_connection.copy_send (buffer, qn);
209- }
210- db_connection.copy_end (qn);
211-
212- return endpoints.size ();
213- }
214-
215143void expire_output_t::create_output_table (pg_conn_t const &db_connection) const
216144{
217- if (!m_table.empty ()) {
218- auto const qn = qualified_name (m_schema, m_table);
219- db_connection.exec (
220- " CREATE TABLE IF NOT EXISTS {} ("
221- " zoom int4 NOT NULL,"
222- " x int4 NOT NULL,"
223- " y int4 NOT NULL,"
224- " first timestamp with time zone DEFAULT CURRENT_TIMESTAMP(0),"
225- " last timestamp with time zone DEFAULT CURRENT_TIMESTAMP(0),"
226- " PRIMARY KEY (zoom, x, y))" ,
227- qn);
228- }
229-
230- if (!m_endpoint_table.empty ()) {
231- auto const qn = qualified_name (m_schema, m_endpoint_table);
232- db_connection.exec (" CREATE TABLE IF NOT EXISTS {} ("
233- " geom geometry(Point) NOT NULL)" ,
234- qn);
235- }
145+ auto const qn = qualified_name (m_schema, m_table);
146+ db_connection.exec (
147+ " CREATE TABLE IF NOT EXISTS {} ("
148+ " zoom int4 NOT NULL,"
149+ " x int4 NOT NULL,"
150+ " y int4 NOT NULL,"
151+ " first timestamp with time zone DEFAULT CURRENT_TIMESTAMP(0),"
152+ " last timestamp with time zone DEFAULT CURRENT_TIMESTAMP(0),"
153+ " PRIMARY KEY (zoom, x, y))" ,
154+ qn);
236155}
0 commit comments