Skip to content

Commit b1d3ba1

Browse files
committed
Switch to new prepare functions also in generalization code
1 parent 6a0c731 commit b1d3ba1

File tree

8 files changed

+95
-83
lines changed

8 files changed

+95
-83
lines changed

src/gen/gen-base.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,22 @@ pg_result_t gen_base_t::dbexec(params_t const &tmp_params,
9999
return connection().exec(sql_template.render());
100100
}
101101

102+
void gen_base_t::dbprepare(std::string_view stmt, std::string const &templ)
103+
{
104+
template_t sql_template{templ};
105+
sql_template.set_params(get_params());
106+
return connection().prepare(stmt, fmt::runtime(sql_template.render()));
107+
}
108+
109+
void gen_base_t::dbprepare(std::string_view stmt, params_t const &tmp_params,
110+
std::string const &templ)
111+
{
112+
template_t sql_template{templ};
113+
sql_template.set_params(get_params());
114+
sql_template.set_params(tmp_params);
115+
return connection().prepare(stmt, fmt::runtime(sql_template.render()));
116+
}
117+
102118
void gen_base_t::raster_table_preprocess(std::string const &table)
103119
{
104120
params_t tmp_params;

src/gen/gen-base.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ class gen_base_t
101101

102102
pg_result_t dbexec(params_t const &tmp_params, std::string const &templ);
103103

104+
void dbprepare(std::string_view stmt, std::string const &templ);
105+
106+
void dbprepare(std::string_view stmt, params_t const &tmp_params,
107+
std::string const &templ);
108+
104109
void raster_table_preprocess(std::string const &table);
105110

106111
void raster_table_postprocess(std::string const &table);

src/gen/gen-discrete-isolation.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ FROM {src} WHERE {importance_column} > 0
132132
timer(m_timer_reorder).stop();
133133

134134
log_gen("Writing results to destination table...");
135-
dbexec("PREPARE update (int, real, int4, int8) AS"
136-
" UPDATE {src} SET dirank = $1, discr_iso = $2, irank = $3"
137-
" WHERE {id_column} = $4");
135+
dbprepare("update", "UPDATE {src} SET dirank = $1::int,"
136+
" discr_iso = $2::real, irank = $3::int4"
137+
" WHERE {id_column} = $4::int8");
138138

139139
timer(m_timer_write).start();
140140
connection().exec("BEGIN");

src/gen/gen-rivers.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,8 @@ SELECT "{id_column}", "{width_column}", "{name_column}", "{geom_column}"
334334
}
335335

336336
log_gen("Writing results to destination table...");
337-
dbexec("PREPARE ins (int8, real, text, geometry) AS"
338-
" INSERT INTO {dest} ({id_column}, width, name, geom)"
339-
" VALUES ($1, $2, $3, $4)");
337+
dbprepare("ins", "INSERT INTO {dest} ({id_column}, width, name, geom)"
338+
" VALUES ($1::int8, $2::real, $3::text, $4::geometry)");
340339

341340
timer(m_timer_write).start();
342341
connection().exec("BEGIN");

src/gen/gen-tile-builtup.cpp

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,10 @@ CREATE TABLE IF NOT EXISTS "{}" (
127127
}
128128

129129
if (params->get_bool("make_valid")) {
130-
params->set(
131-
"geom_sql",
132-
"(ST_Dump(ST_CollectionExtract(ST_MakeValid($1), 3))).geom");
130+
params->set("geom_sql", "(ST_Dump(ST_CollectionExtract(ST_MakeValid("
131+
"$1::geometry), 3))).geom");
133132
} else {
134-
params->set("geom_sql", "$1");
133+
params->set("geom_sql", "$1::geometry");
135134
}
136135

137136
if ((m_image_extent & (m_image_extent - 1)) != 0) {
@@ -154,28 +153,24 @@ CREATE TABLE IF NOT EXISTS "{}" (
154153
auto const schema = get_params().get_string("schema");
155154
for (auto const &src_table : m_source_tables) {
156155
params_t tmp_params;
157-
tmp_params.set("N", std::to_string(n++));
158156
tmp_params.set("SRC", qualified_name(schema, src_table));
159157

160-
dbexec(tmp_params, R"(
161-
PREPARE get_geoms_{N} (real, real, real, real) AS
162-
SELECT "{geom_column}", '' AS param
158+
dbprepare(fmt::format("get_geoms_{}", n++), tmp_params, R"(
159+
SELECT "{geom_column}", '' AS param
163160
FROM {SRC}
164-
WHERE "{geom_column}" && ST_MakeEnvelope($1, $2, $3, $4, 3857)
161+
WHERE "{geom_column}" && ST_MakeEnvelope($1::real, $2::real, $3::real, $4::real, 3857)
165162
)");
166163
}
167164

168165
if (m_has_area_column) {
169-
dbexec(R"(
170-
PREPARE insert_geoms (geometry, int, int) AS
171-
INSERT INTO {dest} ("{geom_column}", x, y, "{area_column}")
172-
VALUES ({geom_sql}, $2, $3, $4)
166+
dbprepare("insert_geoms", R"(
167+
INSERT INTO {dest} ("{geom_column}", x, y, "{area_column}")
168+
VALUES ({geom_sql}, $2::int, $3::int, $4::real)
173169
)");
174170
} else {
175-
dbexec(R"(
176-
PREPARE insert_geoms (geometry, int, int) AS
177-
INSERT INTO {dest} ("{geom_column}", x, y)
178-
VALUES ({geom_sql}, $2, $3)
171+
dbprepare("insert_geoms", R"(
172+
INSERT INTO {dest} ("{geom_column}", x, y)
173+
VALUES ({geom_sql}, $2::int, $3::int)
179174
)");
180175
}
181176
}

src/gen/gen-tile-raster.cpp

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,10 @@ CREATE TABLE IF NOT EXISTS "{}" (
116116
}
117117

118118
if (get_params().get_bool("make_valid")) {
119-
params->set(
120-
"geom_sql",
121-
"(ST_Dump(ST_CollectionExtract(ST_MakeValid($1), 3))).geom");
119+
params->set("geom_sql", "(ST_Dump(ST_CollectionExtract("
120+
" ST_MakeValid($1::geometry), 3))).geom");
122121
} else {
123-
params->set("geom_sql", "$1");
122+
params->set("geom_sql", "$1::geometry");
124123
}
125124

126125
if ((m_image_extent & (m_image_extent - 1)) != 0) {
@@ -142,34 +141,32 @@ CREATE TABLE IF NOT EXISTS "{}" (
142141
std::string prepare;
143142
if (with_group_by()) {
144143
prepare = R"(
145-
PREPARE get_geoms (real, real, real, real) AS
146-
SELECT "{geom_column}", "{group_by_column}"
144+
SELECT "{geom_column}", "{group_by_column}"
147145
FROM {src}
148-
WHERE "{geom_column}" && ST_MakeEnvelope($1, $2, $3, $4, 3857)
146+
WHERE "{geom_column}" &&
147+
ST_MakeEnvelope($1::real, $2::real, $3::real, $4::real, 3857)
149148
)";
150-
dbexec(R"(
151-
PREPARE insert_geoms (geometry, int, int, text) AS
152-
INSERT INTO {dest} ("{geom_column}", x, y, "{group_by_column}")
153-
VALUES ({geom_sql}, $2, $3, $4)
149+
dbprepare("insert_geoms", R"(
150+
INSERT INTO {dest} ("{geom_column}", x, y, "{group_by_column}")
151+
VALUES ({geom_sql}, $2::int, $3::int, $4::text)
154152
)");
155153
} else {
156154
prepare = R"(
157-
PREPARE get_geoms (real, real, real, real) AS
158-
SELECT "{geom_column}", NULL AS param
155+
SELECT "{geom_column}", NULL AS param
159156
FROM {src}
160-
WHERE "{geom_column}" && ST_MakeEnvelope($1, $2, $3, $4, 3857)
157+
WHERE "{geom_column}" &&
158+
ST_MakeEnvelope($1::real, $2::real, $3::real, $4::real, 3857)
161159
)";
162-
dbexec(R"(
163-
PREPARE insert_geoms (geometry, int, int, text) AS
164-
INSERT INTO {dest} ("{geom_column}", x, y) VALUES ({geom_sql}, $2, $3)
160+
dbprepare("insert_geoms", R"(
161+
INSERT INTO {dest} ("{geom_column}", x, y) VALUES ({geom_sql}, $2::int, $3::int)
165162
)");
166163
}
167164

168165
if (!where_condition.empty()) {
169166
prepare.append(fmt::format(" AND ({})", where_condition));
170167
}
171168

172-
dbexec(prepare);
169+
dbprepare("get_geoms", prepare);
173170
}
174171

175172
void gen_tile_raster_union_t::process(tile_t const &tile)

src/gen/gen-tile-vector.cpp

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -36,48 +36,48 @@ gen_tile_vector_union_t::gen_tile_vector_union_t(pg_conn_t *connection,
3636
}
3737

3838
if (with_group_by()) {
39-
dbexec(R"(
40-
PREPARE gen_geoms (int, int, int) AS
41-
WITH gen_tile_input AS (
42-
SELECT "{group_by_column}" AS col, "{geom_column}" AS geom FROM {src}
43-
WHERE "{geom_column}" && ST_TileEnvelope($1, $2, $3, margin => {margin})
44-
),
45-
buffered AS (
46-
SELECT col, ST_Buffer(geom, {buffer_size}) AS geom
47-
FROM gen_tile_input
48-
),
49-
merged AS (
50-
SELECT col, ST_Union(geom) AS geom
51-
FROM buffered GROUP BY col
52-
),
53-
unbuffered AS (
54-
SELECT col, ST_Buffer(ST_Buffer(geom, -2 * {buffer_size}), {buffer_size}) AS geom
55-
FROM merged
56-
)
57-
INSERT INTO {dest} (x, y, "{group_by_column}", "{geom_column}")
58-
SELECT $2, $3, col, (ST_Dump(geom)).geom FROM unbuffered
39+
dbprepare("gen_geoms", R"(
40+
WITH gen_tile_input AS (
41+
SELECT "{group_by_column}" AS col, "{geom_column}" AS geom FROM {src}
42+
WHERE "{geom_column}" &&
43+
ST_TileEnvelope($1::int, $2::int, $3::int, margin => {margin})
44+
),
45+
buffered AS (
46+
SELECT col, ST_Buffer(geom, {buffer_size}) AS geom
47+
FROM gen_tile_input
48+
),
49+
merged AS (
50+
SELECT col, ST_Union(geom) AS geom
51+
FROM buffered GROUP BY col
52+
),
53+
unbuffered AS (
54+
SELECT col, ST_Buffer(ST_Buffer(geom, -2 * {buffer_size}), {buffer_size}) AS geom
55+
FROM merged
56+
)
57+
INSERT INTO {dest} (x, y, "{group_by_column}", "{geom_column}")
58+
SELECT $2::int, $3::int, col, (ST_Dump(geom)).geom FROM unbuffered
5959
)");
6060
} else {
61-
dbexec(R"(
62-
PREPARE gen_geoms (int, int, int) AS
63-
WITH gen_tile_input AS (
64-
SELECT "{geom_column}" AS geom FROM {src}
65-
WHERE "{geom_column}" && ST_TileEnvelope($1, $2, $3, margin => {margin})
66-
),
67-
buffered AS (
68-
SELECT ST_Buffer(geom, {buffer_size}) AS geom
69-
FROM gen_tile_input
70-
),
71-
merged AS (
72-
SELECT ST_Union(geom) AS geom
73-
FROM buffered
74-
),
75-
unbuffered AS (
76-
SELECT ST_Buffer(ST_Buffer(geom, -2 * {buffer_size}), {buffer_size}) AS geom
77-
FROM merged
78-
)
79-
INSERT INTO {dest} (x, y, "{geom_column}")
80-
SELECT $2, $3, (ST_Dump(geom)).geom FROM unbuffered
61+
dbprepare("gen_geoms", R"(
62+
WITH gen_tile_input AS (
63+
SELECT "{geom_column}" AS geom FROM {src}
64+
WHERE "{geom_column}" &&
65+
ST_TileEnvelope($1::int, $2::int, $3::int, margin => {margin})
66+
),
67+
buffered AS (
68+
SELECT ST_Buffer(geom, {buffer_size}) AS geom
69+
FROM gen_tile_input
70+
),
71+
merged AS (
72+
SELECT ST_Union(geom) AS geom
73+
FROM buffered
74+
),
75+
unbuffered AS (
76+
SELECT ST_Buffer(ST_Buffer(geom, -2 * {buffer_size}), {buffer_size}) AS geom
77+
FROM merged
78+
)
79+
INSERT INTO {dest} (x, y, "{geom_column}")
80+
SELECT $2::int, $3::int, (ST_Dump(geom)).geom FROM unbuffered
8181
)");
8282
}
8383
}

src/gen/gen-tile.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ gen_tile_t::gen_tile_t(pg_conn_t *connection, bool append, params_t *params)
2323
m_with_group_by = !get_params().get_identifier("group_by_column").empty();
2424

2525
if (append_mode()) {
26-
dbexec("PREPARE del_geoms (int, int) AS"
27-
" DELETE FROM {dest} WHERE x=$1 AND y=$2");
26+
dbprepare("del_geoms",
27+
"DELETE FROM {dest} WHERE x=$1::int AND y=$2::int");
2828
}
2929
}
3030

0 commit comments

Comments
 (0)