Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/flex-table-column.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ std::vector<column_type_lookup> const COLUMN_TYPES = {
{"int8", table_column_type::int8},
{"bigint", table_column_type::int8},
{"real", table_column_type::real},
{"double", table_column_type::double_precision},
{"timestamp", table_column_type::timestamp},
{"timestamptz", table_column_type::timestamptz},
{"hstore", table_column_type::hstore},
Expand Down Expand Up @@ -146,6 +147,8 @@ std::string flex_table_column_t::sql_type_name() const
return "int8";
case table_column_type::real:
return "real";
case table_column_type::double_precision:
return "double precision";
case table_column_type::timestamp:
return "timestamp";
case table_column_type::timestamptz:
Expand Down
1 change: 1 addition & 0 deletions src/flex-table-column.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ enum class table_column_type : uint8_t
int8,

real,
double_precision,

timestamp,
timestamptz,
Expand Down
4 changes: 2 additions & 2 deletions src/flex-write.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,14 +349,14 @@ void flex_write_column(lua_State *lua_state, geometry_cache_t *geom_cache,
throw fmt_error("Invalid type '{}' for int8 column.",
lua_typename(lua_state, ltype));
}
} else if (column.type() == table_column_type::real) {
} else if (column.type() == table_column_type::real || column.type() == table_column_type::double_precision) {
if (ltype == LUA_TNUMBER) {
copy_mgr->add_column(lua_tonumber(lua_state, -1));
} else if (ltype == LUA_TSTRING) {
write_double(copy_mgr, column,
lua_tolstring(lua_state, -1, nullptr));
} else {
throw fmt_error("Invalid type '{}' for real column.",
throw fmt_error("Invalid type '{}' for real/double precision column.",
lua_typename(lua_state, ltype));
}
} else if (column.type() == table_column_type::timestamp) {
Expand Down
5 changes: 5 additions & 0 deletions tests/data/test_output_flex_types.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ local test_table = osm2pgsql.define_node_table("nodes", {
{ column = 'tint4', type = 'int4' },
{ column = 'tint8', type = 'int8' },
{ column = 'treal', type = 'real' },
{ column = 'tdubl', type = 'double' },
{ column = 'thstr', type = 'hstore' },
{ column = 'tjson', type = 'jsonb' },
{ column = 'tdirn', type = 'direction' },
Expand Down Expand Up @@ -47,6 +48,7 @@ function osm2pgsql.process_node(object)
tint4 = n,
tint8 = n,
treal = n,
tdubl = n,
tjson = n,
tdirn = n,
tsqlt = n,
Expand Down Expand Up @@ -100,6 +102,7 @@ function osm2pgsql.process_node(object)
tint4 = string.format('%d', n),
tint8 = string.format('%d', n),
treal = string.format('%d', n),
tdubl = string.format('%d', n),
tsqlt = string.format('%d', n),
}
end
Expand All @@ -109,6 +112,7 @@ function osm2pgsql.process_node(object)
tint4 = ' 42',
tint8 = ' 42',
treal = ' 42',
tdubl = ' 42',
tsqlt = ' 42',
}
return
Expand All @@ -122,6 +126,7 @@ function osm2pgsql.process_node(object)
tint4 = n,
tint8 = n,
treal = n,
tdubl = n,
}
end
return
Expand Down
50 changes: 25 additions & 25 deletions tests/test-output-flex-types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,19 +91,19 @@ TEST_CASE("type number")
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-2147483649' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 IS NULL AND tint8 = -2147483649 AND tjson = '-2147483649'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-2147483648' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = -2147483648 AND tint8 = -2147483648 AND tjson = '-2147483648'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-2147483647' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = -2147483647 AND tint8 = -2147483647 AND tjson = '-2147483647'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-32769' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = -32769 AND tint8 = -32769 AND treal = -32769 AND tjson = '-32769'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-32768' AND ttext = tsqlt AND tbool = true AND tint2 = -32768 AND tint4 = -32768 AND tint8 = -32768 AND treal = -32768 AND tjson = '-32768'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-32767' AND ttext = tsqlt AND tbool = true AND tint2 = -32767 AND tint4 = -32767 AND tint8 = -32767 AND treal = -32767 AND tjson = '-32767'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-2' AND ttext = tsqlt AND tbool = true AND tint2 = -2 AND tint4 = -2 AND tint8 = -2 AND treal = -2 AND tjson = '-2'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-1' AND ttext = tsqlt AND tbool = true AND tint2 = -1 AND tint4 = -1 AND tint8 = -1 AND treal = -1 AND tjson = '-1'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", " tsqlt = '-0.5' AND ttext = tsqlt AND tbool = true AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = -0.5 AND tjson = '-0.5'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '0' AND ttext = tsqlt AND tbool = false AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = 0 AND tjson = '0'::jsonb AND tdirn = 0"));
CHECK(1 == conn.get_count("nodes", " tsqlt = '0.5' AND ttext = tsqlt AND tbool = true AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = 0.5 AND tjson = '0.5'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '1' AND ttext = tsqlt AND tbool = true AND tint2 = 1 AND tint4 = 1 AND tint8 = 1 AND treal = 1 AND tjson = '1'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '2' AND ttext = tsqlt AND tbool = true AND tint2 = 2 AND tint4 = 2 AND tint8 = 2 AND treal = 2 AND tjson = '2'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '32767' AND ttext = tsqlt AND tbool = true AND tint2 = 32767 AND tint4 = 32767 AND tint8 = 32767 AND treal = 32767 AND tjson = '32767'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '32768' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = 32768 AND tint8 = 32768 AND treal = 32768 AND tjson = '32768'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '32769' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = 32769 AND tint8 = 32769 AND treal = 32769 AND tjson = '32769'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-32769' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = -32769 AND tint8 = -32769 AND treal = -32769 AND tdubl = -32769 AND tdubl = -32769 AND tdubl = -32769 AND tjson = '-32769'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-32768' AND ttext = tsqlt AND tbool = true AND tint2 = -32768 AND tint4 = -32768 AND tint8 = -32768 AND treal = -32768 AND tdubl = -32768 AND tdubl = -32768 AND tjson = '-32768'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-32767' AND ttext = tsqlt AND tbool = true AND tint2 = -32767 AND tint4 = -32767 AND tint8 = -32767 AND treal = -32767 AND tdubl = -32767 AND tdubl = -32767 AND tjson = '-32767'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-2' AND ttext = tsqlt AND tbool = true AND tint2 = -2 AND tint4 = -2 AND tint8 = -2 AND treal = -2 AND tdubl = -2 AND tjson = '-2'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '-1' AND ttext = tsqlt AND tbool = true AND tint2 = -1 AND tint4 = -1 AND tint8 = -1 AND treal = -1 AND tdubl = -1 AND tjson = '-1'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", " tsqlt = '-0.5' AND ttext = tsqlt AND tbool = true AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = -0.5 AND tdubl = -0.5 AND tjson = '-0.5'::jsonb AND tdirn = -1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '0' AND ttext = tsqlt AND tbool = false AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = 0 AND tdubl = 0 AND tjson = '0'::jsonb AND tdirn = 0"));
CHECK(1 == conn.get_count("nodes", " tsqlt = '0.5' AND ttext = tsqlt AND tbool = true AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = 0.5 AND tdubl = 0.5 AND tjson = '0.5'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '1' AND ttext = tsqlt AND tbool = true AND tint2 = 1 AND tint4 = 1 AND tint8 = 1 AND treal = 1 AND tdubl = 1 AND tjson = '1'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '2' AND ttext = tsqlt AND tbool = true AND tint2 = 2 AND tint4 = 2 AND tint8 = 2 AND treal = 2 AND tdubl = 2 AND tjson = '2'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '32767' AND ttext = tsqlt AND tbool = true AND tint2 = 32767 AND tint4 = 32767 AND tint8 = 32767 AND treal = 32767 AND tdubl = 32767 AND tjson = '32767'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '32768' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = 32768 AND tint8 = 32768 AND treal = 32768 AND tdubl = 32768 AND tjson = '32768'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '32769' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = 32769 AND tint8 = 32769 AND treal = 32769 AND tdubl = 32769 AND tjson = '32769'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '2147483647' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 = 2147483647 AND tint8 = 2147483647 AND tjson = '2147483647'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '2147483648' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 IS NULL AND tint8 = 2147483648 AND tjson = '2147483648'::jsonb AND tdirn = 1"));
CHECK(1 == conn.get_count("nodes", "split_part(tsqlt, '.', 1) = '2147483649' AND ttext = tsqlt AND tbool = true AND tint2 IS NULL AND tint4 IS NULL AND tint8 = 2147483649 AND tjson = '2147483649'::jsonb AND tdirn = 1"));
Expand Down Expand Up @@ -154,21 +154,21 @@ TEST_CASE("type string (with number)")
CHECK(1 == conn.get_count("nodes", "tsqlt = '-2147483649' AND ttext = tsqlt AND tint2 IS NULL AND tint4 IS NULL AND tint8 = -2147483649 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-2147483648' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = -2147483648 AND tint8 = -2147483648 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-2147483647' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = -2147483647 AND tint8 = -2147483647 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-32769' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = -32769 AND tint8 = -32769 AND treal = -32769"));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-32768' AND ttext = tsqlt AND tint2 = -32768 AND tint4 = -32768 AND tint8 = -32768 AND treal = -32768"));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-32767' AND ttext = tsqlt AND tint2 = -32767 AND tint4 = -32767 AND tint8 = -32767 AND treal = -32767"));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-2' AND ttext = tsqlt AND tint2 = -2 AND tint4 = -2 AND tint8 = -2 AND treal = -2 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-1' AND ttext = tsqlt AND tint2 = -1 AND tint4 = -1 AND tint8 = -1 AND treal = -1 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '0' AND ttext = tsqlt AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = 0 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '1' AND ttext = tsqlt AND tint2 = 1 AND tint4 = 1 AND tint8 = 1 AND treal = 1 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '2' AND ttext = tsqlt AND tint2 = 2 AND tint4 = 2 AND tint8 = 2 AND treal = 2 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '32767' AND ttext = tsqlt AND tint2 = 32767 AND tint4 = 32767 AND tint8 = 32767 AND treal = 32767 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '32768' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = 32768 AND tint8 = 32768 AND treal = 32768 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '32769' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = 32769 AND tint8 = 32769 AND treal = 32769 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-32769' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = -32769 AND tint8 = -32769 AND treal = -32769 AND tdubl = -32769"));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-32768' AND ttext = tsqlt AND tint2 = -32768 AND tint4 = -32768 AND tint8 = -32768 AND treal = -32768 AND tdubl = -32768"));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-32767' AND ttext = tsqlt AND tint2 = -32767 AND tint4 = -32767 AND tint8 = -32767 AND treal = -32767 AND tdubl = -32767"));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-2' AND ttext = tsqlt AND tint2 = -2 AND tint4 = -2 AND tint8 = -2 AND treal = -2 AND tdubl = -2 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '-1' AND ttext = tsqlt AND tint2 = -1 AND tint4 = -1 AND tint8 = -1 AND treal = -1 AND tdubl = -1 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '0' AND ttext = tsqlt AND tint2 = 0 AND tint4 = 0 AND tint8 = 0 AND treal = 0 AND tdubl = 0 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '1' AND ttext = tsqlt AND tint2 = 1 AND tint4 = 1 AND tint8 = 1 AND treal = 1 AND tdubl = 1 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '2' AND ttext = tsqlt AND tint2 = 2 AND tint4 = 2 AND tint8 = 2 AND treal = 2 AND tdubl = 2 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '32767' AND ttext = tsqlt AND tint2 = 32767 AND tint4 = 32767 AND tint8 = 32767 AND treal = 32767 AND tdubl = 32767 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '32768' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = 32768 AND tint8 = 32768 AND treal = 32768 AND tdubl = 32768 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '32769' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = 32769 AND tint8 = 32769 AND treal = 32769 AND tdubl = 32769 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '2147483647' AND ttext = tsqlt AND tint2 IS NULL AND tint4 = 2147483647 AND tint8 = 2147483647 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '2147483648' AND ttext = tsqlt AND tint2 IS NULL AND tint4 IS NULL AND tint8 = 2147483648 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = '2147483649' AND ttext = tsqlt AND tint2 IS NULL AND tint4 IS NULL AND tint8 = 2147483649 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = ' 42' AND ttext = tsqlt AND tint2 = 42 AND tint4 = 42 AND tint8 = 42 AND treal = 42 "));
CHECK(1 == conn.get_count("nodes", "tsqlt = ' 42' AND ttext = tsqlt AND tint2 = 42 AND tint4 = 42 AND tint8 = 42 AND treal = 42 AND tdubl = 42 "));
// clang-format on
}

Expand Down
Loading