aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-05-21 14:30:15 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-05-21 14:30:15 +0100
commit440902f91a5938f0fa711825bd54bd925ed42ca4 (patch)
treefac929275c8d1263a6b4512824f12ae227fa814a /src
parent8c225e4eae4a093ed92533418c3cc1554ae7df77 (diff)
downloadrspamd-440902f91a5938f0fa711825bd54bd925ed42ca4.tar.gz
rspamd-440902f91a5938f0fa711825bd54bd925ed42ca4.zip
[Minor] Clickhouse: Allow to have explicit order of extra columns
Diffstat (limited to 'src')
-rw-r--r--src/plugins/lua/clickhouse.lua28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/plugins/lua/clickhouse.lua b/src/plugins/lua/clickhouse.lua
index 06edd33b2..fb4db3fc9 100644
--- a/src/plugins/lua/clickhouse.lua
+++ b/src/plugins/lua/clickhouse.lua
@@ -1350,8 +1350,14 @@ if opts then
if settings.extra_columns then
-- Check sanity and create selector closures
local lua_selectors = require "lua_selectors"
-
- for col_name,col_data in pairs(settings.extra_columns) do
+ local columns_transformed = {}
+ local need_sort = false
+ -- Select traverse function depending on what we have
+ local iter_func = settings.extra_columns[1] and ipairs or pairs
+
+ for col_name,col_data in iter_func(settings.extra_columns) do
+ -- Array based extra columns
+ if col_data.name then col_name = col_data.name end
if not col_data.selector or not col_data.type then
rspamd_logger.errx(rspamd_config, 'cannot add clickhouse extra row %s: no type or no selector',
col_name)
@@ -1368,8 +1374,6 @@ if opts then
if not selector then
rspamd_logger.errx(rspamd_config, 'cannot add clickhouse extra row %s: bad selector: %s',
col_name, col_data.selector)
- -- Remove column
- settings.extra_columns[col_name] = nil
else
if not col_data.default_value then
if is_array then
@@ -1379,20 +1383,22 @@ if opts then
end
end
col_data.real_selector = selector
+ if not col_data.name then
+ col_data.name = col_name
+ need_sort = true
+ end
+ table.insert(columns_transformed, col_data)
end
end
end
-- Convert extra columns from a map to an array sorted by column name to
-- preserve strict order when doing altering
- local extra_cols = {}
- for col_name,col_data in pairs(settings.extra_columns) do
- local nelt = lua_util.shallowcopy(col_data)
- nelt.name = col_name
- extra_cols[#extra_cols + 1] = nelt
+ if need_sort then
+ rspamd_logger.infox(rspamd_config, 'sort extra columns as they are not configured as an array')
+ table.sort(columns_transformed, function(c1, c2) return c1.name < c2.name end)
end
- table.sort(extra_cols, function(c1, c2) return c1.name < c2.name end)
- settings.extra_columns = extra_cols
+ settings.extra_columns = columns_transformed
end
rspamd_config:register_symbol({