From 757c37c03ee7cdd2cacf133f0475fca19330bb1f Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Sun, 8 Mar 2020 00:09:45 +0300 Subject: [PATCH] Support for NULL as random seed; reordered parameters for convenience --- dbms/src/Storages/StorageGenerateRandom.cpp | 10 +++++++--- .../TableFunctions/TableFunctionGenerateRandom.cpp | 12 ++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/dbms/src/Storages/StorageGenerateRandom.cpp b/dbms/src/Storages/StorageGenerateRandom.cpp index 9efc832bf8..7584b417a9 100644 --- a/dbms/src/Storages/StorageGenerateRandom.cpp +++ b/dbms/src/Storages/StorageGenerateRandom.cpp @@ -376,13 +376,17 @@ void registerStorageGenerateRandom(StorageFactory & factory) UInt64 max_array_length = 10; if (engine_args.size() >= 1) - random_seed = engine_args[0]->as().value.safeGet(); + { + const Field & value = engine_args[0]->as().value; + if (!value.isNull()) + random_seed = value.safeGet(); + } if (engine_args.size() >= 2) - max_string_length = engine_args[1]->as().value.safeGet(); + max_string_length = engine_args[1]->as().value.safeGet(); if (engine_args.size() == 3) - max_array_length = engine_args[2]->as().value.safeGet(); + max_array_length = engine_args[2]->as().value.safeGet(); return StorageGenerateRandom::create(args.table_id, args.columns, max_array_length, max_string_length, random_seed); diff --git a/dbms/src/TableFunctions/TableFunctionGenerateRandom.cpp b/dbms/src/TableFunctions/TableFunctionGenerateRandom.cpp index 6431ca3bd5..16c957aecb 100644 --- a/dbms/src/TableFunctions/TableFunctionGenerateRandom.cpp +++ b/dbms/src/TableFunctions/TableFunctionGenerateRandom.cpp @@ -45,20 +45,24 @@ StoragePtr TableFunctionGenerateRandom::executeImpl(const ASTPtr & ast_function, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); /// Parsing first argument as table structure and creating a sample block - std::string structure = args[0]->as().value.safeGet(); + std::string structure = args[0]->as().value.safeGet(); UInt64 max_string_length = 10; UInt64 max_array_length = 10; std::optional random_seed = 0; // zero for random if (args.size() >= 2) - random_seed = args[1]->as().value.safeGet(); + { + const Field & value = args[1]->as().value; + if (!value.isNull()) + random_seed = value.safeGet(); + } if (args.size() >= 3) - max_string_length = args[2]->as().value.safeGet(); + max_string_length = args[2]->as().value.safeGet(); if (args.size() == 4) - max_array_length = args[3]->as().value.safeGet(); + max_array_length = args[3]->as().value.safeGet(); ColumnsDescription columns = parseColumnsListFromString(structure, context); -- GitLab