MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / executeDirect

Method executeDirect

src/Common/ShellCommand.cpp:295–322  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

293
294
295std::unique_ptr<ShellCommand> ShellCommand::executeDirect(const ShellCommand::Config & config)
296{
297 const auto & path = config.command;
298 const auto & arguments = config.arguments;
299
300 size_t argv_sum_size = path.size() + 1;
301 for (const auto & arg : arguments)
302 argv_sum_size += arg.size() + 1;
303
304 std::vector<char *> argv(arguments.size() + 2);
305 std::vector<char> argv_data(argv_sum_size);
306 WriteBufferFromPointer writer(argv_data.data(), argv_sum_size);
307
308 argv[0] = writer.position();
309 writer.write(path.data(), path.size() + 1);
310
311 for (size_t i = 0, size = arguments.size(); i < size; ++i)
312 {
313 argv[i + 1] = writer.position();
314 writer.write(arguments[i].data(), arguments[i].size() + 1);
315 }
316
317 writer.finalize();
318
319 argv[arguments.size() + 1] = nullptr;
320
321 return executeImpl(path.data(), argv.data(), config);
322}
323
324struct ShellCommand::tryWaitResult
325{

Callers

nothing calls this directly

Calls 6

executeImplFunction · 0.50
sizeMethod · 0.45
dataMethod · 0.45
positionMethod · 0.45
writeMethod · 0.45
finalizeMethod · 0.45

Tested by

no test coverage detected