**Use case**

ClickHouse already throws exception if the data for INSERT is empty:

```
Code: 108. DB::Exception: No data to insert
```

Let's introduce a setting, enabled by default, to control this behavior.
The user will be able to disable it to allow empty INSERTs.

This is useful in some batch scripts.
dst_array_value[dst_row] += src_array_value[src_row];
                    break;
                case ProfileEvents::Type::GAUGE:
                    dst_array_value[dst_row] = src_array_value[src_row];
                    break;
            }
            rows_by_name.erase(it
        }
    }
    /// Copy rows from src that dst does not contains.
    for (const auto & [id, pos] : rows_by_name)
    {
        if (thread_id_filter_mask.contains(pos))
        {
            continue;
        }
        for (size_t col = 0; col < src.columns( ++col)
        {
            mutable_columns[col]->insert((*src.getByPosition(col).column)[pos]
        }
    }
    dst.setColumns(std::move(mutable_columns)
}
std::atomic_flag exit_on_signal;
class QueryInterruptHandler : private boost::noncopyable
{
public:
    static void start() { exit_on_signal.clear( }
    /// Return true if the query was stopped.
    static bool stop() { return exit_on_signal.test_and_set( }