diff options
author | Alexander Smirnov <[email protected]> | 2025-01-29 00:51:30 +0000 |
---|---|---|
committer | Alexander Smirnov <[email protected]> | 2025-01-29 00:51:30 +0000 |
commit | 8ff0f7baba855d1e4b09946cc83a74e57033a9c5 (patch) | |
tree | f6cc7c0a7521379ca66ec6a52dc79407507b3547 | |
parent | a084e85adde4c3d5b408625be14338f47b7a23d9 (diff) | |
parent | f562d654c2fe8cfc407e8a6e596474c3975a2204 (diff) |
Merge branch 'rightlib' into merge-libs-250129-0050
92 files changed, 1839 insertions, 420 deletions
diff --git a/build/conf/java.conf b/build/conf/java.conf index 6403346a1c4..bfcb263fe26 100644 --- a/build/conf/java.conf +++ b/build/conf/java.conf @@ -498,6 +498,7 @@ macro _DO_2_RUN_JAR_PROGRAM(IN_DIRS_VAR="uniq_", IN_DIRS_INPUTS[], IN{input}[], .PEERDIR=build/platform/java/jdk $JDK_RESOURCE_PEERDIR .CMD=${hide;kv:"p RJ"} ${hide;kv:"pc blue"} ${hide:JAVA_FAKEID} ${cwd:BINDIR} $YMAKE_PYTHON ${input:"build/scripts/mkdir.py"} ${OUT_DIR} && ${cwd:CWD} $YMAKE_PYTHON ${input:"build/scripts/setup_java_tmpdir.py"} $YMAKE_PYTHON ${input:"build/scripts/stdout2stderr.py"} ${pre=--file=:STDOUT} ${hide;output:STDOUT} ${pre=--file=:STDOUT_NOAUTO} ${hide;noauto;output:STDOUT_NOAUTO} $YMAKE_PYTHON ${input:"build/scripts/fix_java_command_file_cp.py"} --build-root ${ARCADIA_BUILD_ROOT} $JDK_RESOURCE/bin/java -Dfile.encoding=utf8 -classpath ${RUN_JAR_PROG_CP_PRE}${tool:CLASSPATH}${RUN_JAR_PROG_CP_SUF} ${Args} && $_GENTAR_HELPER($CLASSPATH $IN_DIR $IN $IN_NOPARSE $TOOL $Args OUT_DIR $OUT_DIR) ${hide;input:IN} ${hide;context=TEXT;input:IN_NOPARSE} ${hide;noauto;output:OUT_NOAUTO} ${hide;output:OUT} ${hide;tool:TOOL} ${IN_DIRS_INPUTS} .SEM=$_SEM_RUN_JAVA_PROGRAM + .STRUCT_SEM=yes } # tag:java-specific @@ -752,7 +753,7 @@ when ($BUILD_TYPE == "DEBUG" && $NO_DEBUGINFO != "yes") { } _PREPARE_SRC_JAR= -_PREPARE_SRC_JAR_IMPL=&& $JAR_GEN_JSRCS && $LINK_JAR_JSOURCES +_PREPARE_SRC_JAR_IMPL=$LINK_JAR_JSOURCES _PACK_SRC_JAR_IMPL=&& ${cwd;suf=/src:BINDIR} $JDK_RESOURCE/bin/jar cfvm ${output;pre=${BINDIR}/${MODULE_PREFIX};suf=-sources.jar:REALPRJNAME} $VCS_JAVA . _PACK_SRC_JAR= @@ -831,6 +832,7 @@ MAVEN_DEPLOY_CMD=$YMAKE_PYTHON ${input:"build/scripts/stdout2stderr.py"} $MAVEN_ MAVEN_EXPORT_CMD= # tag:java-specific +JAR_BUILD_SCRIPT_FLAGS_DELIM=DELIM JAR_BUILD_SCRIPT_FLAGS= JAVA_COVERAGE_SRCLIST_FLAG=--coverage ${output;pre=${MODULE_PREFIX};suf=.cpsf:REALPRJNAME} --source-root ${ARCADIA_ROOT} JAVA_COVERAGE_SRCLIST= @@ -838,17 +840,20 @@ PREPARE_JAR_BUILD=${cwd:BINDIR} ${YMAKE_PYTHON3} ${input:"build/scripts/prepare_ ${JAR_BUILD_SCRIPT_FLAGS} \ --bindir ${BINDIR} --moddir ${CURDIR} \ --java ${BINDIR}/all-java.srclst ${KT_SRSCLIST} ${JAVA_COVERAGE_SRCLIST} \ - --ya-start-command-file ${ext=.gentar:AUTO_INPUT} ${ALL_JAR_SOURCES} ${ext=.java:AUTO_INPUT} ${ext=.kt:AUTO_INPUT} --ya-end-command-file \ + --ya-start-command-file \ + ${ext=.gentar:AUTO_INPUT} ${ALL_JAR_SOURCES} ${ext=.java:AUTO_INPUT} ${ext=.kt:AUTO_INPUT} \ + $JAR_GEN_SRCS $JAR_GEN_JSRCS \ + --ya-end-command-file \ ${hide;input:"build/scripts/process_command_files.py"} \ ${hide;input:"build/scripts/java_pack_to_file.py"} \ - ${hide;input:"build/scripts/autotar_gendirs.py"} + ${hide;input:"build/scripts/autotar_gendirs.py"} \ + ${hide;input:"build/scripts/resolve_java_srcs.py"} COLLECT_CLASSPATH=${WRITER_PY} --file ${BINDIR}/bfg.txt -m --ya-start-command-file ${rootrel:MANAGED_PEERS_CLOSURE} $KT_CLASSPATH_ITEM --ya-end-command-file LINK_CLASSPATH=${YMAKE_PYTHON} ${input:"build/scripts/make_manifest_from_bf.py"} ${BINDIR}/bfg.txt ${ARCADIA_BUILD_ROOT}/bfg.jar COMPILE_JAVA_SRCLIST=$_JAVAC_RUN_HELPER($JAVAC_CMD) PACK_JAR=$_PACK_JAR_HELPER($TARGET) LINK_JAR=${hide:JAVA_FAKEID} ${hide;kv:"p JV"} ${hide;kv:"pc light-blue"} ${hide;kv:"show_out"} ${hide;requirements:"cpu:2"} \ && $PREPARE_JAR_BUILD \ - && $JAR_GEN_SRCS \ && $_PREPARE_SRC_JAR \ && $ALL_KT_COMMANDS \ && $COLLECT_CLASSPATH \ @@ -1065,7 +1070,7 @@ module JAR_LIBRARY: _COMPILABLE_JAR_BASE { # See for kapt.kotlin.generated: https://github.com/JetBrains/kotlin/blob/master/plugins/kapt3/kapt3-cli/testData/integration/kotlinFileGeneration/build.txt _KAPT_OPTS=-Xplugin=${tool:"contrib/java/org/jetbrains/kotlin/kotlin-annotation-processing/1.9.24"} $KT_KAPT_PLUGIN_OPTS _RUN_KAPT=${YMAKE_PYTHON} ${input:"build/scripts/with_kapt_args.py"} ${pre=--ap-classpath :KT_KAPT_AP_CLASSPATH} -- $COMPILE_KT $_KAPT_OPTS - _APPEND_KAPT_GENERATED_SRCS=$YMAKE_PYTHON ${input:"build/scripts/resolve_java_srcs.py"} -d $KT_KAPT_SOURCES_DIR --include-patterns '**/*.java' '**/*.kt' --resolve-kotlin --append -s ${BINDIR}/all-java.srclst -k $KT_SRCLIST -r ${BINDIR}/not-used.txt + _APPEND_KAPT_GENERATED_SRCS=$YMAKE_PYTHON3 ${input:"build/scripts/resolve_java_srcs.py"} -d $KT_KAPT_SOURCES_DIR --include-patterns '**/*.java' '**/*.kt' --resolve-kotlin --append -s ${BINDIR}/all-java.srclst -k $KT_SRCLIST -r ${BINDIR}/not-used.txt ALL_KT_COMMANDS+=&& $_RUN_KAPT && $_APPEND_KAPT_GENERATED_SRCS } diff --git a/build/conf/opensource.conf b/build/conf/opensource.conf index 7efeed46291..411e6010ad3 100644 --- a/build/conf/opensource.conf +++ b/build/conf/opensource.conf @@ -1,6 +1,8 @@ EXPORT_CMAKE=no EXPORT_GRADLE=no _SEM_IGNORED=IGNORED +# TODO Remove +IGNORED=IGNORED when ($OPENSOURCE == "yes" || $OPENSOURCE_PROJECT == "ymake" || $OPENSOURCE_PROJECT == "ya") { YA_OPENSOURCE=yes diff --git a/build/config/tests/cpp_style/config18.clang-format b/build/config/tests/cpp_style/config18.clang-format deleted file mode 100644 index b2d89e2e756..00000000000 --- a/build/config/tests/cpp_style/config18.clang-format +++ /dev/null @@ -1,97 +0,0 @@ -Language: Cpp -AccessModifierOffset: -4 -ConstructorInitializerIndentWidth: 4 -AlignEscapedNewlinesLeft: false -AlignEscapedNewlines: Left -AlignTrailingComments: - Kind: Always - OverEmptyLines: 0 -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortBlocksOnASingleLine: false -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AllowShortFunctionsOnASingleLine: None -AlwaysBreakTemplateDeclarations: true -AlwaysBreakBeforeMultilineStrings: false -BreakBeforeBinaryOperators: false -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: true -BinPackParameters: true -ColumnLimit: 0 -ConstructorInitializerAllOnOneLineOrOnePerLine: false -DerivePointerAlignment: false -ExperimentalAutoDetectBinPacking: false -IndentCaseLabels: true -IndentWrappedFunctionNames: false -IndentFunctionDeclarationAfterType: false -MaxEmptyLinesToKeep: 1 -KeepEmptyLinesAtTheStartOfBlocks: false -NamespaceIndentation: All -FixNamespaceComments: true -ShortNamespaceLines: 0 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: true -PackConstructorInitializers: Never -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakString: 1000 -PenaltyBreakFirstLessLess: 120 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Left -SpacesBeforeTrailingComments: 1 -SpacesInSquareBrackets: false -Cpp11BracedListStyle: true -Standard: c++20 -IndentWidth: 4 -TabWidth: 4 -UseTab: Never -BreakBeforeBraces: Attach -InsertBraces: true - -# NB: BraceWrapping has no effect unless BreakBeforeBraces is set to Custom -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: false - BeforeElse: false - IndentBraces: true - -SpacesInParentheses: false -SpacesInAngles: false -SpaceInEmptyParentheses: false -SpacesInCStyleCastParentheses: false -SpacesInContainerLiterals: true -SpaceBeforeAssignmentOperators: true -ContinuationIndentWidth: 4 -CommentPragmas: '^ IWYU pragma:' -ForEachMacros: [ - foreach, - Q_FOREACH, - BOOST_FOREACH, - # Is not a foreach, but correct formatting is achieved - Y_DEFER -] -IfMacros: [ - with_lock # Is not an if, but correct formatting is achieved -] -SpaceBeforeParens: ControlStatements -DisableFormat: false -SortIncludes: false -IndentPPDirectives: BeforeHash - -SpaceBeforeInheritanceColon: false -NamespaceMacros: [Y_UNIT_TEST_SUITE] -AttributeMacros: [Y_PRINTF_FORMAT, Y_NO_SANITIZE, Y_FORCE_INLINE, Y_NO_INLINE, Y_WARN_UNUSED_RESULT, Y_HIDDEN, Y_PUBLIC, Y_PURE_FUNCTION] -IndentExternBlock: Indent -TypenameMacros: [Y_THREAD, Y_STATIC_THREAD, Y_POD_THREAD, Y_POD_STATIC_THREAD] -StatementAttributeLikeMacros: [ythrow] -SpacesInLineCommentPrefix: - Minimum: 1 - Maximum: 1 diff --git a/build/config/tests/cpp_style/default_configs.json b/build/config/tests/cpp_style/default_configs.json index d35dc1baf81..f8749d1a012 100644 --- a/build/config/tests/cpp_style/default_configs.json +++ b/build/config/tests/cpp_style/default_configs.json @@ -1,3 +1,3 @@ { - "clang_format": "build/config/tests/cpp_style/config18.clang-format" + "clang_format": "build/config/tests/cpp_style/config.clang-format" } diff --git a/build/config/tests/cpp_style/ya.make b/build/config/tests/cpp_style/ya.make index afb406a4fc6..bb5fccd5ea4 100644 --- a/build/config/tests/cpp_style/ya.make +++ b/build/config/tests/cpp_style/ya.make @@ -2,7 +2,6 @@ LIBRARY() RESOURCE_FILES( config.clang-format - config18.clang-format ) END() diff --git a/build/external_resources/flake8_py3/ya.make b/build/external_resources/flake8_py3/ya.make index 3d89508e8e8..d831fb905bf 100644 --- a/build/external_resources/flake8_py3/ya.make +++ b/build/external_resources/flake8_py3/ya.make @@ -12,12 +12,12 @@ ENDIF() DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE( FLAKE8_PY3 - sbr:7501315930 FOR DARWIN-ARM64 - sbr:7501316202 FOR DARWIN + sbr:7913038653 FOR DARWIN-ARM64 + sbr:7913040444 FOR DARWIN sbr:6726869647 FOR LINUX-PPC64LE - sbr:7501316756 FOR LINUX - sbr:7501315620 FOR LINUX-AARCH64 - sbr:7501316414 FOR WIN32 + sbr:7913043508 FOR LINUX + sbr:7913036782 FOR LINUX-AARCH64 + sbr:7913041800 FOR WIN32 ) END() diff --git a/build/mapping.conf.json b/build/mapping.conf.json index 09375c3c77c..931a6abcd22 100644 --- a/build/mapping.conf.json +++ b/build/mapping.conf.json @@ -300,6 +300,7 @@ "6760720465": "https://devtools-registry.s3.yandex.net/6760720465", "6822863322": "https://devtools-registry.s3.yandex.net/6822863322", "7501316202": "https://devtools-registry.s3.yandex.net/7501316202", + "7913040444": "https://devtools-registry.s3.yandex.net/7913040444", "6603781997": "https://devtools-registry.s3.yandex.net/6603781997", "6652223452": "https://devtools-registry.s3.yandex.net/6652223452", "6674733966": "https://devtools-registry.s3.yandex.net/6674733966", @@ -307,6 +308,7 @@ "6760720256": "https://devtools-registry.s3.yandex.net/6760720256", "6822862832": "https://devtools-registry.s3.yandex.net/6822862832", "7501315930": "https://devtools-registry.s3.yandex.net/7501315930", + "7913038653": "https://devtools-registry.s3.yandex.net/7913038653", "6603787904": "https://devtools-registry.s3.yandex.net/6603787904", "6652225714": "https://devtools-registry.s3.yandex.net/6652225714", "6674734993": "https://devtools-registry.s3.yandex.net/6674734993", @@ -314,6 +316,7 @@ "6760721014": "https://devtools-registry.s3.yandex.net/6760721014", "6822864509": "https://devtools-registry.s3.yandex.net/6822864509", "7501316756": "https://devtools-registry.s3.yandex.net/7501316756", + "7913043508": "https://devtools-registry.s3.yandex.net/7913043508", "6603780916": "https://devtools-registry.s3.yandex.net/6603780916", "6652222817": "https://devtools-registry.s3.yandex.net/6652222817", "6674733653": "https://devtools-registry.s3.yandex.net/6674733653", @@ -321,6 +324,7 @@ "6760720046": "https://devtools-registry.s3.yandex.net/6760720046", "6822862341": "https://devtools-registry.s3.yandex.net/6822862341", "7501315620": "https://devtools-registry.s3.yandex.net/7501315620", + "7913036782": "https://devtools-registry.s3.yandex.net/7913036782", "6603783079": "https://devtools-registry.s3.yandex.net/6603783079", "6652224021": "https://devtools-registry.s3.yandex.net/6652224021", "6674734285": "https://devtools-registry.s3.yandex.net/6674734285", @@ -332,6 +336,7 @@ "6760720811": "https://devtools-registry.s3.yandex.net/6760720811", "6822864007": "https://devtools-registry.s3.yandex.net/6822864007", "7501316414": "https://devtools-registry.s3.yandex.net/7501316414", + "7913041800": "https://devtools-registry.s3.yandex.net/7913041800", "3961412335": "https://devtools-registry.s3.yandex.net/3961412335", "3961411314": "https://devtools-registry.s3.yandex.net/3961411314", "3961413236": "https://devtools-registry.s3.yandex.net/3961413236", @@ -1500,6 +1505,7 @@ "6760720465": "devtools/ya/test/programs/flake8/flake8 for darwin", "6822863322": "devtools/ya/test/programs/flake8/flake8 for darwin", "7501316202": "devtools/ya/test/programs/flake8/flake8 for darwin", + "7913040444": "devtools/ya/test/programs/flake8/flake8 for darwin", "6603781997": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", "6652223452": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", "6674733966": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", @@ -1507,6 +1513,7 @@ "6760720256": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", "6822862832": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", "7501315930": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", + "7913038653": "devtools/ya/test/programs/flake8/flake8 for darwin-arm64", "6603787904": "devtools/ya/test/programs/flake8/flake8 for linux", "6652225714": "devtools/ya/test/programs/flake8/flake8 for linux", "6674734993": "devtools/ya/test/programs/flake8/flake8 for linux", @@ -1514,6 +1521,7 @@ "6760721014": "devtools/ya/test/programs/flake8/flake8 for linux", "6822864509": "devtools/ya/test/programs/flake8/flake8 for linux", "7501316756": "devtools/ya/test/programs/flake8/flake8 for linux", + "7913043508": "devtools/ya/test/programs/flake8/flake8 for linux", "6603780916": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", "6652222817": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", "6674733653": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", @@ -1521,6 +1529,7 @@ "6760720046": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", "6822862341": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", "7501315620": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", + "7913036782": "devtools/ya/test/programs/flake8/flake8 for linux-aarch64", "6603783079": "devtools/ya/test/programs/flake8/flake8 for linux-ppc64le", "6652224021": "devtools/ya/test/programs/flake8/flake8 for linux-ppc64le", "6674734285": "devtools/ya/test/programs/flake8/flake8 for linux-ppc64le", @@ -1532,6 +1541,7 @@ "6760720811": "devtools/ya/test/programs/flake8/flake8 for win32", "6822864007": "devtools/ya/test/programs/flake8/flake8 for win32", "7501316414": "devtools/ya/test/programs/flake8/flake8 for win32", + "7913041800": "devtools/ya/test/programs/flake8/flake8 for win32", "3961412335": "devtools/ya/test/programs/flake8/py2/flake8 for darwin", "3961411314": "devtools/ya/test/programs/flake8/py2/flake8 for darwin-arm64", "3961413236": "devtools/ya/test/programs/flake8/py2/flake8 for linux", diff --git a/build/plugins/_dart_fields.py b/build/plugins/_dart_fields.py index d7d0fa5737e..49c49f345f4 100644 --- a/build/plugins/_dart_fields.py +++ b/build/plugins/_dart_fields.py @@ -662,6 +662,8 @@ class LintConfigs: class LintExtraParams: KEY = 'LINT-EXTRA-PARAMS' + _CUSTOM_CLANG_FORMAT_BIN_ALLOWED_PATHS = ('ads', 'bigrt', 'grut') + @classmethod def from_macro_args(cls, unit, flat_args, spec_args): extra_params = spec_args.get('EXTRA_PARAMS', []) @@ -670,6 +672,12 @@ class LintExtraParams: message = 'Wrong EXTRA_PARAMS value: "{}". Values must have format "name=value".'.format(arg) ymake.report_configure_error(message) raise DartValueError() + if 'clang_format_bin' in arg: + upath = unit.path()[3:] + if not upath.startswith(cls._CUSTOM_CLANG_FORMAT_BIN_ALLOWED_PATHS): + message = f'Custom clang-format is not allowed in upath: {upath}' + ymake.report_configure_error(message) + raise DartValueError() return {cls.KEY: serialize_list(extra_params)} diff --git a/build/plugins/java.py b/build/plugins/java.py index a424b163501..d58b5f9d6c3 100644 --- a/build/plugins/java.py +++ b/build/plugins/java.py @@ -256,18 +256,19 @@ def on_fill_jar_gen_srcs(unit, *args): resolved_srcdir = unit.resolve_arc_path(srcdir) if not resolved_srcdir.startswith('$') or resolved_srcdir.startswith('$S'): return + if jar_type == 'SRC_JAR' and unit.get('SOURCES_JAR') != 'yes': + return + args_delim = unit.get('JAR_BUILD_SCRIPT_FLAGS_DELIM') exclude_pos = args.index('EXCLUDE') - globs = args[7:exclude_pos] - excludes = args[exclude_pos + 1 :] + globs = ' '.join(args[7:exclude_pos]) + excludes = ' '.join(args[exclude_pos + 1 :]) var = unit.get(varname) - var += ' && ${{cwd:BINDIR}} $YMAKE_PYTHON ${{input:"build/scripts/resolve_java_srcs.py"}} --append -d {} -s {} -k {} -r {} --include-patterns {}'.format( - srcdir, java_list, kt_list, res_list, ' '.join(globs) - ) + var += f' {args_delim} --append -d {srcdir} -s {java_list} -k {kt_list} -r {res_list} --include-patterns {globs}' if jar_type == 'SRC_JAR': var += ' --all-resources' if len(excludes) > 0: - var += ' --exclude-patterns {}'.format(' '.join(excludes)) + var += f' --exclude-patterns {excludes}' if unit.get('WITH_KOTLIN_VALUE') == 'yes': var += ' --resolve-kotlin' unit.set([varname, var]) diff --git a/build/scripts/prepare_jar_build.py b/build/scripts/prepare_jar_build.py index 17caba727e9..7c7a47fab18 100644 --- a/build/scripts/prepare_jar_build.py +++ b/build/scripts/prepare_jar_build.py @@ -7,8 +7,10 @@ import argparse sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import java_pack_to_file as jcov +import resolve_java_srcs as resolve from autotar_gendirs import unpack_dir + def writelines(f, rng): f.writelines(item + '\n' for item in rng) @@ -121,8 +123,19 @@ def prepare_build_dirs(bindir, with_sources_jar): os.makedirs(dir) +def split_cmd_by_delim(cmd, delim='DELIM'): + result = [[]] + for arg in cmd: + if arg == delim: + result.append([]) + else: + result[-1].append(arg) + return result[0], result[1:] + + def main(): - args = pcf.get_args(sys.argv[1:]) + args, resolve_args = split_cmd_by_delim(pcf.get_args(sys.argv[1:])) + parser = argparse.ArgumentParser() parser.add_argument('--with-sources-jar', action='store_true') parser.add_argument('--moddir') @@ -157,6 +170,9 @@ def main(): if args.coverage: jcov.write_coverage_sources(args.coverage, args.source_root, src_consumer.coverage) + for rargs in resolve_args: + resolve.cli_main(rargs, force_skip_source_jars=not args.with_sources_jar) + return 0 diff --git a/build/scripts/resolve_java_srcs.py b/build/scripts/resolve_java_srcs.py index 446bb554762..4cce49136f3 100644 --- a/build/scripts/resolve_java_srcs.py +++ b/build/scripts/resolve_java_srcs.py @@ -22,7 +22,7 @@ def pattern_to_regexp(p): '^' + ('/' if not p.startswith('**') else '') + re.escape(p) - .replace(r'\*\*\/', '[_DIR_]') + .replace(r'\*\*/', '[_DIR_]') .replace(r'\*', '[_FILE_]') .replace('[_DIR_]', '(.*/)?') .replace('[_FILE_]', '([^/]*)') @@ -99,7 +99,7 @@ def do_it( open(kotlin_sources_file, mode).writelines(i + '\n' for i in k + j) -if __name__ == '__main__': +def cli_main(argv, force_skip_source_jars=False): parser = argparse.ArgumentParser() parser.add_argument('-d', '--directory', required=True) parser.add_argument('-s', '--sources-file', required=True) @@ -110,6 +110,13 @@ if __name__ == '__main__': parser.add_argument('--resolve-kotlin', action='store_true', default=False) parser.add_argument('--include-patterns', nargs='*', default=[]) parser.add_argument('--exclude-patterns', nargs='*', default=[]) - args = parser.parse_args() + args = parser.parse_args(argv) + + if force_skip_source_jars and args.all_resources: + return do_it(**vars(args)) + + +if __name__ == '__main__': + cli_main(sys.argv[1:]) diff --git a/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym b/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym index ac76bc2e97b..55fe016a3e0 100644 --- a/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym +++ b/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym @@ -93,13 +93,15 @@ other_not_emscripten = frozenset([ 'emutls', 'enable_execute_stack', 'eprintf', - 'truncdfbf2', - 'truncsfbf2', ]) def it_srcs(): for x in common: n = name(x) + + if n.startswith("atomic_") or n.endswith("bf2") or n == "extendbfsf2": + # these are handled explicitly below + continue if n in scrt: continue if arch != 'x86_64_not_win' and n in x86_not_win: @@ -120,18 +122,51 @@ EOF ls *.c > common +cat << EOF +IF (OS_DARWIN OR OS_IOS) + SRCS( + atomic_flag_clear.c + atomic_flag_clear_explicit.c + atomic_flag_test_and_set.c + atomic_flag_test_and_set_explicit.c + atomic_signal_fence.c + atomic_thread_fence.c + ) +ENDIF() + +IF (ARCH_ARM64 OR ARCH_X86_64) + # As of r25b, clang-for-android does not have bf16 support. + # These can be built using r27 and above. + IF (NOT OS_ANDROID) + SRCS( + # NB: sources that were commented out were added in llvm-20 + extendbfsf2.c + truncdfbf2.c + # truncxfbf2.c + truncsfbf2.c + # trunctfbf2.c + ) + ENDIF() +ENDIF() +EOF + echo 'IF (ARCH_AARCH64)' echo 'SRCS(' ls aarch64/*.c cpu_model/aarch64.*c aarch64/*.S > special python3 join.py common special aarch echo ')' + echo 'IF(NOT OS_DARWIN) SRCS(aarch64/sme-libc-routines.c) ENDIF()' echo 'ELSEIF (ARCH_X86_64)' echo 'SRCS(' ls x86_64/*.c cpu_model/x86.*c x86_64/*.S > special python3 join.py common special x86_64 echo ')' -echo 'IF(NOT OS_WINDOWS) SRCS(x86_64/floatdixf.c' + +# As llvm/compiler-rt/lib/builtins says: +# Implement extended-precision builtins, assuming long double is 80 bits. +# long double is not 80 bits on Android or MSVC. +echo 'IF(NOT OS_WINDOWS AND NOT OS_ANDROID) SRCS(x86_64/floatdixf.c' echo '' > special python3 join.py common special x86_64_not_win echo ') ENDIF()' diff --git a/contrib/libs/cxxsupp/builtins/ya.make b/contrib/libs/cxxsupp/builtins/ya.make index b6d7a872abd..46976f6b352 100644 --- a/contrib/libs/cxxsupp/builtins/ya.make +++ b/contrib/libs/cxxsupp/builtins/ya.make @@ -60,6 +60,32 @@ IF (GCC OR CLANG) NO_LTO() ENDIF() +IF (OS_DARWIN OR OS_IOS) + SRCS( + atomic_flag_clear.c + atomic_flag_clear_explicit.c + atomic_flag_test_and_set.c + atomic_flag_test_and_set_explicit.c + atomic_signal_fence.c + atomic_thread_fence.c + ) +ENDIF() + +IF (ARCH_ARM64 OR ARCH_X86_64) + # As of r25b, clang-for-android does not have bf16 support. + # These can be built using r27 and above. + IF (NOT OS_ANDROID) + SRCS( + # NB: sources that were commented out were added in llvm-20 + extendbfsf2.c + truncdfbf2.c + # truncxfbf2.c + truncsfbf2.c + # trunctfbf2.c + ) + ENDIF() +ENDIF() + IF (ARCH_AARCH64) SRCS( aarch64/chkstk.S @@ -83,12 +109,6 @@ IF (ARCH_AARCH64) ashrdi3.c ashrti3.c atomic.c - atomic_flag_clear.c - atomic_flag_clear_explicit.c - atomic_flag_test_and_set.c - atomic_flag_test_and_set_explicit.c - atomic_signal_fence.c - atomic_thread_fence.c bswapdi2.c bswapsi2.c clear_cache.c @@ -119,7 +139,6 @@ IF (ARCH_AARCH64) emutls.c enable_execute_stack.c eprintf.c - extendbfsf2.c extenddftf2.c extendhfsf2.c extendhftf2.c @@ -209,10 +228,8 @@ IF (ARCH_AARCH64) subvsi3.c subvti3.c trampoline_setup.c - truncdfbf2.c truncdfhf2.c truncdfsf2.c - truncsfbf2.c truncsfhf2.c trunctfdf2.c trunctfhf2.c @@ -251,12 +268,6 @@ ELSEIF (ARCH_X86_64) ashrdi3.c ashrti3.c atomic.c - atomic_flag_clear.c - atomic_flag_clear_explicit.c - atomic_flag_test_and_set.c - atomic_flag_test_and_set_explicit.c - atomic_signal_fence.c - atomic_thread_fence.c bswapdi2.c bswapsi2.c clear_cache.c @@ -287,7 +298,6 @@ ELSEIF (ARCH_X86_64) emutls.c enable_execute_stack.c eprintf.c - extendbfsf2.c extenddftf2.c extendhfsf2.c extendhftf2.c @@ -374,10 +384,8 @@ ELSEIF (ARCH_X86_64) subvsi3.c subvti3.c trampoline_setup.c - truncdfbf2.c truncdfhf2.c truncdfsf2.c - truncsfbf2.c truncsfhf2.c trunctfdf2.c trunctfhf2.c @@ -400,7 +408,7 @@ ELSEIF (ARCH_X86_64) x86_64/floatundisf.S x86_64/floatundixf.S ) - IF (NOT OS_WINDOWS) + IF (NOT OS_WINDOWS AND NOT OS_ANDROID) SRCS( x86_64/floatdixf.c divxc3.c @@ -434,12 +442,6 @@ ELSE() ashrdi3.c ashrti3.c atomic.c - atomic_flag_clear.c - atomic_flag_clear_explicit.c - atomic_flag_test_and_set.c - atomic_flag_test_and_set_explicit.c - atomic_signal_fence.c - atomic_thread_fence.c bswapdi2.c bswapsi2.c clzdi2.c @@ -465,7 +467,6 @@ ELSE() divtc3.c divtf3.c divti3.c - extendbfsf2.c extenddftf2.c extendhfsf2.c extendhftf2.c @@ -580,8 +581,6 @@ ELSE() emutls.c enable_execute_stack.c eprintf.c - truncdfbf2.c - truncsfbf2.c ) ENDIF() ENDIF() diff --git a/contrib/python/responses/py3/.dist-info/METADATA b/contrib/python/responses/py3/.dist-info/METADATA index 7085a1a9f06..0b507faad26 100644 --- a/contrib/python/responses/py3/.dist-info/METADATA +++ b/contrib/python/responses/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: responses -Version: 0.25.3 +Version: 0.25.5 Summary: A utility library for mocking out the `requests` Python library. Home-page: https://github.com/getsentry/responses Author: David Cramer @@ -24,21 +24,21 @@ Classifier: Topic :: Software Development Requires-Python: >=3.8 Description-Content-Type: text/x-rst License-File: LICENSE -Requires-Dist: requests <3.0,>=2.30.0 -Requires-Dist: urllib3 <3.0,>=1.25.10 +Requires-Dist: requests<3.0,>=2.30.0 +Requires-Dist: urllib3<3.0,>=1.25.10 Requires-Dist: pyyaml Provides-Extra: tests -Requires-Dist: pytest >=7.0.0 ; extra == 'tests' -Requires-Dist: coverage >=6.0.0 ; extra == 'tests' -Requires-Dist: pytest-cov ; extra == 'tests' -Requires-Dist: pytest-asyncio ; extra == 'tests' -Requires-Dist: pytest-httpserver ; extra == 'tests' -Requires-Dist: flake8 ; extra == 'tests' -Requires-Dist: types-PyYAML ; extra == 'tests' -Requires-Dist: types-requests ; extra == 'tests' -Requires-Dist: mypy ; extra == 'tests' -Requires-Dist: tomli-w ; extra == 'tests' -Requires-Dist: tomli ; (python_version < "3.11") and extra == 'tests' +Requires-Dist: pytest>=7.0.0; extra == "tests" +Requires-Dist: coverage>=6.0.0; extra == "tests" +Requires-Dist: pytest-cov; extra == "tests" +Requires-Dist: pytest-asyncio; extra == "tests" +Requires-Dist: pytest-httpserver; extra == "tests" +Requires-Dist: flake8; extra == "tests" +Requires-Dist: types-PyYAML; extra == "tests" +Requires-Dist: types-requests; extra == "tests" +Requires-Dist: mypy; extra == "tests" +Requires-Dist: tomli-w; extra == "tests" +Requires-Dist: tomli; python_version < "3.11" and extra == "tests" Responses ========= @@ -104,100 +104,6 @@ Please ensure to update your code according to the guidance. - Use ``responses.mock.assert_all_requests_are_fired``, ``responses.mock.passthru_prefixes``, ``responses.mock.target`` instead. -BETA Features -------------- -Below you can find a list of BETA features. Although we will try to keep the API backwards compatible -with released version, we reserve the right to change these APIs before they are considered stable. Please share your feedback via -`GitHub Issues <https://github.com/getsentry/responses/issues>`_. - -Record Responses to files -^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can perform real requests to the server and ``responses`` will automatically record the output to the -file. Recorded data is stored in `YAML <https://yaml.org>`_ format. - -Apply ``@responses._recorder.record(file_path="out.yaml")`` decorator to any function where you perform -requests to record responses to ``out.yaml`` file. - -Following code - -.. code-block:: python - - import requests - from responses import _recorder - - - def another(): - rsp = requests.get("https://httpstat.us/500") - rsp = requests.get("https://httpstat.us/202") - - - @_recorder.record(file_path="out.yaml") - def test_recorder(): - rsp = requests.get("https://httpstat.us/404") - rsp = requests.get("https://httpbin.org/status/wrong") - another() - -will produce next output: - -.. code-block:: yaml - - responses: - - response: - auto_calculate_content_length: false - body: 404 Not Found - content_type: text/plain - method: GET - status: 404 - url: https://httpstat.us/404 - - response: - auto_calculate_content_length: false - body: Invalid status code - content_type: text/plain - method: GET - status: 400 - url: https://httpbin.org/status/wrong - - response: - auto_calculate_content_length: false - body: 500 Internal Server Error - content_type: text/plain - method: GET - status: 500 - url: https://httpstat.us/500 - - response: - auto_calculate_content_length: false - body: 202 Accepted - content_type: text/plain - method: GET - status: 202 - url: https://httpstat.us/202 - - -Replay responses (populate registry) from files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can populate your active registry from a ``yaml`` file with recorded responses. -(See `Record Responses to files`_ to understand how to obtain a file). -To do that you need to execute ``responses._add_from_file(file_path="out.yaml")`` within -an activated decorator or a context manager. - -The following code example registers a ``patch`` response, then all responses present in -``out.yaml`` file and a ``post`` response at the end. - -.. code-block:: python - - import responses - - - @responses.activate - def run(): - responses.patch("http://httpbin.org") - responses._add_from_file(file_path="out.yaml") - responses.post("http://httpbin.org/form") - - - run() - Basics ------ @@ -941,16 +847,19 @@ Integration with unit test frameworks Responses as a ``pytest`` fixture ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Use the pytest-responses package to export ``responses`` as a pytest fixture. + +``pip install pytest-responses`` + +You can then access it in a pytest script using: + .. code-block:: python - @pytest.fixture - def mocked_responses(): - with responses.RequestsMock() as rsps: - yield rsps + import pytest_responses - def test_api(mocked_responses): - mocked_responses.get( + def test_api(responses): + responses.get( "http://twitter.com/api/1/foobar", body="{}", status=200, @@ -1441,6 +1350,116 @@ single thread to access it. await run() +BETA Features +------------- +Below you can find a list of BETA features. Although we will try to keep the API backwards compatible +with released version, we reserve the right to change these APIs before they are considered stable. Please share your feedback via +`GitHub Issues <https://github.com/getsentry/responses/issues>`_. + +Record Responses to files +^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can perform real requests to the server and ``responses`` will automatically record the output to the +file. Recorded data is stored in `YAML <https://yaml.org>`_ format. + +Apply ``@responses._recorder.record(file_path="out.yaml")`` decorator to any function where you perform +requests to record responses to ``out.yaml`` file. + +Following code + +.. code-block:: python + + import requests + from responses import _recorder + + + def another(): + rsp = requests.get("https://httpstat.us/500") + rsp = requests.get("https://httpstat.us/202") + + + @_recorder.record(file_path="out.yaml") + def test_recorder(): + rsp = requests.get("https://httpstat.us/404") + rsp = requests.get("https://httpbin.org/status/wrong") + another() + +will produce next output: + +.. code-block:: yaml + + responses: + - response: + auto_calculate_content_length: false + body: 404 Not Found + content_type: text/plain + method: GET + status: 404 + url: https://httpstat.us/404 + - response: + auto_calculate_content_length: false + body: Invalid status code + content_type: text/plain + method: GET + status: 400 + url: https://httpbin.org/status/wrong + - response: + auto_calculate_content_length: false + body: 500 Internal Server Error + content_type: text/plain + method: GET + status: 500 + url: https://httpstat.us/500 + - response: + auto_calculate_content_length: false + body: 202 Accepted + content_type: text/plain + method: GET + status: 202 + url: https://httpstat.us/202 + +If you are in the REPL, you can also activete the recorder for all following responses: + +.. code-block:: python + + import requests + from responses import _recorder + + _recorder.recorder.start() + + requests.get("https://httpstat.us/500") + + _recorder.recorder.dump_to_file("out.yaml") + + # you can stop or reset the recorder + _recorder.recorder.stop() + _recorder.recorder.reset() + +Replay responses (populate registry) from files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can populate your active registry from a ``yaml`` file with recorded responses. +(See `Record Responses to files`_ to understand how to obtain a file). +To do that you need to execute ``responses._add_from_file(file_path="out.yaml")`` within +an activated decorator or a context manager. + +The following code example registers a ``patch`` response, then all responses present in +``out.yaml`` file and a ``post`` response at the end. + +.. code-block:: python + + import responses + + + @responses.activate + def run(): + responses.patch("http://httpbin.org") + responses._add_from_file(file_path="out.yaml") + responses.post("http://httpbin.org/form") + + + run() + Contributing ------------ diff --git a/contrib/python/responses/py3/README.rst b/contrib/python/responses/py3/README.rst index 9b255076b76..a9c73e7de41 100644 --- a/contrib/python/responses/py3/README.rst +++ b/contrib/python/responses/py3/README.rst @@ -62,100 +62,6 @@ Please ensure to update your code according to the guidance. - Use ``responses.mock.assert_all_requests_are_fired``, ``responses.mock.passthru_prefixes``, ``responses.mock.target`` instead. -BETA Features -------------- -Below you can find a list of BETA features. Although we will try to keep the API backwards compatible -with released version, we reserve the right to change these APIs before they are considered stable. Please share your feedback via -`GitHub Issues <https://github.com/getsentry/responses/issues>`_. - -Record Responses to files -^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can perform real requests to the server and ``responses`` will automatically record the output to the -file. Recorded data is stored in `YAML <https://yaml.org>`_ format. - -Apply ``@responses._recorder.record(file_path="out.yaml")`` decorator to any function where you perform -requests to record responses to ``out.yaml`` file. - -Following code - -.. code-block:: python - - import requests - from responses import _recorder - - - def another(): - rsp = requests.get("https://httpstat.us/500") - rsp = requests.get("https://httpstat.us/202") - - - @_recorder.record(file_path="out.yaml") - def test_recorder(): - rsp = requests.get("https://httpstat.us/404") - rsp = requests.get("https://httpbin.org/status/wrong") - another() - -will produce next output: - -.. code-block:: yaml - - responses: - - response: - auto_calculate_content_length: false - body: 404 Not Found - content_type: text/plain - method: GET - status: 404 - url: https://httpstat.us/404 - - response: - auto_calculate_content_length: false - body: Invalid status code - content_type: text/plain - method: GET - status: 400 - url: https://httpbin.org/status/wrong - - response: - auto_calculate_content_length: false - body: 500 Internal Server Error - content_type: text/plain - method: GET - status: 500 - url: https://httpstat.us/500 - - response: - auto_calculate_content_length: false - body: 202 Accepted - content_type: text/plain - method: GET - status: 202 - url: https://httpstat.us/202 - - -Replay responses (populate registry) from files -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can populate your active registry from a ``yaml`` file with recorded responses. -(See `Record Responses to files`_ to understand how to obtain a file). -To do that you need to execute ``responses._add_from_file(file_path="out.yaml")`` within -an activated decorator or a context manager. - -The following code example registers a ``patch`` response, then all responses present in -``out.yaml`` file and a ``post`` response at the end. - -.. code-block:: python - - import responses - - - @responses.activate - def run(): - responses.patch("http://httpbin.org") - responses._add_from_file(file_path="out.yaml") - responses.post("http://httpbin.org/form") - - - run() - Basics ------ @@ -899,16 +805,19 @@ Integration with unit test frameworks Responses as a ``pytest`` fixture ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Use the pytest-responses package to export ``responses`` as a pytest fixture. + +``pip install pytest-responses`` + +You can then access it in a pytest script using: + .. code-block:: python - @pytest.fixture - def mocked_responses(): - with responses.RequestsMock() as rsps: - yield rsps + import pytest_responses - def test_api(mocked_responses): - mocked_responses.get( + def test_api(responses): + responses.get( "http://twitter.com/api/1/foobar", body="{}", status=200, @@ -1399,6 +1308,116 @@ single thread to access it. await run() +BETA Features +------------- +Below you can find a list of BETA features. Although we will try to keep the API backwards compatible +with released version, we reserve the right to change these APIs before they are considered stable. Please share your feedback via +`GitHub Issues <https://github.com/getsentry/responses/issues>`_. + +Record Responses to files +^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can perform real requests to the server and ``responses`` will automatically record the output to the +file. Recorded data is stored in `YAML <https://yaml.org>`_ format. + +Apply ``@responses._recorder.record(file_path="out.yaml")`` decorator to any function where you perform +requests to record responses to ``out.yaml`` file. + +Following code + +.. code-block:: python + + import requests + from responses import _recorder + + + def another(): + rsp = requests.get("https://httpstat.us/500") + rsp = requests.get("https://httpstat.us/202") + + + @_recorder.record(file_path="out.yaml") + def test_recorder(): + rsp = requests.get("https://httpstat.us/404") + rsp = requests.get("https://httpbin.org/status/wrong") + another() + +will produce next output: + +.. code-block:: yaml + + responses: + - response: + auto_calculate_content_length: false + body: 404 Not Found + content_type: text/plain + method: GET + status: 404 + url: https://httpstat.us/404 + - response: + auto_calculate_content_length: false + body: Invalid status code + content_type: text/plain + method: GET + status: 400 + url: https://httpbin.org/status/wrong + - response: + auto_calculate_content_length: false + body: 500 Internal Server Error + content_type: text/plain + method: GET + status: 500 + url: https://httpstat.us/500 + - response: + auto_calculate_content_length: false + body: 202 Accepted + content_type: text/plain + method: GET + status: 202 + url: https://httpstat.us/202 + +If you are in the REPL, you can also activete the recorder for all following responses: + +.. code-block:: python + + import requests + from responses import _recorder + + _recorder.recorder.start() + + requests.get("https://httpstat.us/500") + + _recorder.recorder.dump_to_file("out.yaml") + + # you can stop or reset the recorder + _recorder.recorder.stop() + _recorder.recorder.reset() + +Replay responses (populate registry) from files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can populate your active registry from a ``yaml`` file with recorded responses. +(See `Record Responses to files`_ to understand how to obtain a file). +To do that you need to execute ``responses._add_from_file(file_path="out.yaml")`` within +an activated decorator or a context manager. + +The following code example registers a ``patch`` response, then all responses present in +``out.yaml`` file and a ``post`` response at the end. + +.. code-block:: python + + import responses + + + @responses.activate + def run(): + responses.patch("http://httpbin.org") + responses._add_from_file(file_path="out.yaml") + responses.post("http://httpbin.org/form") + + + run() + Contributing ------------ diff --git a/contrib/python/responses/py3/responses/__init__.py b/contrib/python/responses/py3/responses/__init__.py index 097e61ee997..69aa1cd9abe 100644 --- a/contrib/python/responses/py3/responses/__init__.py +++ b/contrib/python/responses/py3/responses/__init__.py @@ -249,7 +249,7 @@ class CallList(Sequence[Any], Sized): ... @overload - def __getitem__(self, idx: slice) -> List[Call]: + def __getitem__(self, idx: "slice[int, int, Optional[int]]") -> List[Call]: ... def __getitem__(self, idx: Union[int, slice]) -> Union[Call, List[Call]]: @@ -714,6 +714,11 @@ class RequestsMock: POST: Literal["POST"] = "POST" PUT: Literal["PUT"] = "PUT" + Response: Type[Response] = Response + + # Make the `matchers` name available under a RequestsMock instance + from responses import matchers + response_callback: Optional[Callable[[Any], Any]] = None def __init__( @@ -1054,6 +1059,22 @@ class RequestsMock: params[key] = values return params + def _read_filelike_body( + self, body: Union[str, bytes, BufferedReader, None] + ) -> Union[str, bytes, None]: + # Requests/urllib support multiple types of body, including file-like objects. + # Read from the file if it's a file-like object to avoid storing a closed file + # in the call list and allow the user to compare against the data that was in the + # request. + # See GH #719 + if isinstance(body, str) or isinstance(body, bytes) or body is None: + return body + # Based on + # https://github.com/urllib3/urllib3/blob/abbfbcb1dd274fc54b4f0a7785fd04d59b634195/src/urllib3/util/request.py#L220 + if hasattr(body, "read") or isinstance(body, BufferedReader): + return body.read() + return body + def _on_request( self, adapter: "HTTPAdapter", @@ -1067,6 +1088,7 @@ class RequestsMock: request.params = self._parse_request_params(request.path_url) # type: ignore[attr-defined] request.req_kwargs = kwargs # type: ignore[attr-defined] request_url = str(request.url) + request.body = self._read_filelike_body(request.body) match, match_failed_reasons = self._find_match(request) resp_callback = self.response_callback diff --git a/contrib/python/responses/py3/responses/_recorder.py b/contrib/python/responses/py3/responses/_recorder.py index 64533e29720..151e47aa092 100644 --- a/contrib/python/responses/py3/responses/_recorder.py +++ b/contrib/python/responses/py3/responses/_recorder.py @@ -9,6 +9,7 @@ if TYPE_CHECKING: # pragma: no cover from typing import Callable from typing import Dict from typing import List + from typing import Optional from typing import Type from typing import Union from responses import FirstMatchRegistry @@ -122,10 +123,13 @@ class Recorder(RequestsMock): def dump_to_file( self, - *, file_path: "Union[str, bytes, os.PathLike[Any]]", - registered: "List[BaseResponse]", + *, + registered: "Optional[List[BaseResponse]]" = None, ) -> None: + """Dump the recorded responses to a file.""" + if registered is None: + registered = self.get_registry().registered with open(file_path, "w") as file: _dump(registered, file, yaml.dump) diff --git a/contrib/python/responses/py3/responses/py.typed b/contrib/python/responses/py3/responses/py.typed deleted file mode 100644 index 6fb4e473fa4..00000000000 --- a/contrib/python/responses/py3/responses/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. The mypy package uses inline types. -# file must be here according to https://peps.python.org/pep-0561/#packaging-type-information diff --git a/contrib/python/responses/py3/ya.make b/contrib/python/responses/py3/ya.make index 262b9ef33fe..98126673c83 100644 --- a/contrib/python/responses/py3/ya.make +++ b/contrib/python/responses/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(0.25.3) +VERSION(0.25.5) LICENSE(Apache-2.0) @@ -26,7 +26,6 @@ RESOURCE_FILES( PREFIX contrib/python/responses/py3/ .dist-info/METADATA .dist-info/top_level.txt - responses/py.typed ) END() diff --git a/library/cpp/monlib/encode/unistat/unistat_decoder.cpp b/library/cpp/monlib/encode/unistat/unistat_decoder.cpp index a2b787365cb..9484e6768ad 100644 --- a/library/cpp/monlib/encode/unistat/unistat_decoder.cpp +++ b/library/cpp/monlib/encode/unistat/unistat_decoder.cpp @@ -15,7 +15,7 @@ using namespace NJson; -const re2::RE2 NAME_RE{R"((?:[a-zA-Z0-9\.\-/@_]+_)+(?:[ad][vehmntx]{3}|summ|hgram|max))"}; +const re2::RE2 NAME_RE{R"((?:[a-zA-Z0-9\.\-/@_]+_)+(?:[advehmntx][vehmntx]{3}|summ|hgram|max))"}; namespace NMonitoring { namespace { @@ -144,7 +144,7 @@ namespace NMonitoring { OnHistogram(value); } } else if (IsNumber(value)) { - if (MetricContext_.Name.EndsWith("_ahhh")) { + if (MetricContext_.Name.EndsWith("hhh") && !MetricContext_.IsDeriv) { OnLogHistogram(value); } else { OnScalar(value); @@ -169,7 +169,8 @@ namespace NMonitoring { } void OnLogHistogram(const TJsonValue& value) { - Y_ENSURE(MetricContext_.Name.EndsWith("_ahhh"), "Values list is supported only for _ahhh metrics"); + Y_ENSURE(MetricContext_.Name.EndsWith("hhh") && !MetricContext_.IsDeriv, + "Values list is supported only for histogram metrics"); MetricContext_.Type = EMetricType::HIST; LogHistogramBuilder histogramBuilder; diff --git a/library/cpp/monlib/encode/unistat/unistat_ut.cpp b/library/cpp/monlib/encode/unistat/unistat_ut.cpp index f15fc7c5b79..08b4c602eed 100644 --- a/library/cpp/monlib/encode/unistat/unistat_ut.cpp +++ b/library/cpp/monlib/encode/unistat/unistat_ut.cpp @@ -338,4 +338,35 @@ Y_UNIT_TEST_SUITE(TUnistatDecoderTest) { UNIT_ASSERT_VALUES_EQUAL(label.GetName(), "sensor"); UNIT_ASSERT_VALUES_EQUAL(label.GetValue(), "something_anything_max"); } + + Y_UNIT_TEST(AllowClientAggregations) { + constexpr auto input = TStringBuf(R"( + [ + ["signal_dmmm", 1], + ["signal_ammm", 1], + ["signal_xmmm", 1], + ["signal_emmm", 1], + ["signal_tmmm", 1] + ])"); + NProto::TMultiSamplesList samples; + auto encoder = EncoderProtobuf(&samples); + DecodeUnistat(input, encoder.Get()); + + UNIT_ASSERT_EQUAL(samples.SamplesSize(), 5); + UNIT_ASSERT_EQUAL(samples.GetSamples(0).GetMetricType(), NProto::RATE); + for (size_t i = 1; i < samples.SamplesSize(); ++i) { + UNIT_ASSERT_EQUAL(samples.GetSamples(i).GetMetricType(), NProto::GAUGE); + } + } + + Y_UNIT_TEST(AllowClientHistAggregation) { + constexpr auto input = TStringBuf(R"([["something_hhhh", 1]])"); + NProto::TMultiSamplesList samples; + auto encoder = EncoderProtobuf(&samples); + DecodeUnistat(input, encoder.Get()); + + UNIT_ASSERT_EQUAL(samples.SamplesSize(), 1); + UNIT_ASSERT_EQUAL(samples.GetSamples(0).GetMetricType(), NProto::HISTOGRAM); + UNIT_ASSERT_EQUAL(samples.GetSamples(0).PointsSize(), 1); + } } diff --git a/library/cpp/tld/tlds-alpha-by-domain.txt b/library/cpp/tld/tlds-alpha-by-domain.txt index 1a15372191b..5bc20052bab 100644 --- a/library/cpp/tld/tlds-alpha-by-domain.txt +++ b/library/cpp/tld/tlds-alpha-by-domain.txt @@ -1,4 +1,4 @@ -# Version 2025012500, Last Updated Sat Jan 25 07:07:01 2025 UTC +# Version 2025012800, Last Updated Tue Jan 28 07:07:01 2025 UTC AAA AARP ABB diff --git a/tools/cpp_style_checker/__main__.py b/tools/cpp_style_checker/__main__.py index abaa32ee19c..ab8534a0ad4 100644 --- a/tools/cpp_style_checker/__main__.py +++ b/tools/cpp_style_checker/__main__.py @@ -13,7 +13,12 @@ from library.python.testing.style import rules def main(): params = linter_params.get_params() - clang_format_binary = os.path.join(params.global_resources[CLANG_FORMAT_RESOURCE], 'clang-format') + if 'clang_format_bin' in params.extra_params: + # custom clang-format + clang_format_binary = params.depends[params.extra_params['clang_format_bin']] + else: + clang_format_binary = os.path.join(params.global_resources[CLANG_FORMAT_RESOURCE], 'clang-format') + style_config_path = params.configs[0] with open(style_config_path) as f: diff --git a/tools/cpp_style_checker/ya.make b/tools/cpp_style_checker/ya.make index 35b32a9eaf2..e762be1a1fc 100644 --- a/tools/cpp_style_checker/ya.make +++ b/tools/cpp_style_checker/ya.make @@ -11,4 +11,6 @@ PY_SRCS( __main__.py ) +STYLE_PYTHON() + END() diff --git a/yql/essentials/mount/lib/yql/core.yqls b/yql/essentials/mount/lib/yql/core.yqls index 8ab2b16d665..4dbb358d545 100755 --- a/yql/essentials/mount/lib/yql/core.yqls +++ b/yql/essentials/mount/lib/yql/core.yqls @@ -522,6 +522,13 @@ def signature(script, name): ))) )))) +(let Opaque (lambda '(x) (block '( + (let t (TypeOf x)) + (let ct (CallableType '('0) '(t))) + (let c (Callable ct (lambda '() x))) + (return (Apply c)) +)))) + (export Equals) (export Unequals) (export FindIndex) @@ -562,4 +569,5 @@ def signature(script, name): (export ListSampleImpl) (export ListSampleNImpl) (export ListShuffleImpl) +(export Opaque) ) diff --git a/yql/essentials/sql/v1/builtin.cpp b/yql/essentials/sql/v1/builtin.cpp index 9d017b184ec..c9953c6e0d0 100644 --- a/yql/essentials/sql/v1/builtin.cpp +++ b/yql/essentials/sql/v1/builtin.cpp @@ -3303,6 +3303,7 @@ struct TBuiltinFuncData { {"forcespreadmembers", { "ForceSpreadMembers", 2, 2}}, {"listfromtuple", { "ListFromTuple", 1, 1}}, {"listtotuple", { "ListToTuple", 2, 2}}, + {"opaque", { "Opaque", 1, 1}}, }; return coreFuncs; } diff --git a/yql/essentials/tests/sql/minirun/part0/canondata/result.json b/yql/essentials/tests/sql/minirun/part0/canondata/result.json index 948ea2a8737..209766edb69 100644 --- a/yql/essentials/tests/sql/minirun/part0/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part0/canondata/result.json @@ -240,6 +240,69 @@ "uri": "file://test.test_bitcast_implicit-sub_bitcast-default.txt-Results_/extracted" } ], + "test.test[blocks-and-default.txt-Debug]": [ + { + "checksum": "47525fa40526e04498f0c41e6bc48f59", + "size": 496, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-and-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-and-default.txt-Peephole]": [ + { + "checksum": "25301b655e8f72e42581ed1009f05cf5", + "size": 682, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-and-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-and-default.txt-Results]": [ + { + "checksum": "1004a527d94d3a57c3ddee81c7051ac2", + "size": 928, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-and-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-xor-default.txt-Debug]": [ + { + "checksum": "f0b56bd3576e6d9f549d692dff6522c8", + "size": 496, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-xor-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-xor-default.txt-Peephole]": [ + { + "checksum": "0cf43f4750e64901c4c51aa0d8ff9f75", + "size": 682, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-xor-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-xor-default.txt-Results]": [ + { + "checksum": "4c8389713df37ffc2a69c96c4224eaeb", + "size": 927, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-xor-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-xor_opt_scalar-default.txt-Debug]": [ + { + "checksum": "27783c2f95862105c305c624babb7dfe", + "size": 1425, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-xor_opt_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-xor_opt_scalar-default.txt-Peephole]": [ + { + "checksum": "f513ccd4b355aba2f8aebb682fddd56a", + "size": 1814, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-xor_opt_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-xor_opt_scalar-default.txt-Results]": [ + { + "checksum": "7114d4ac2409c274dd149fb961df544a", + "size": 10854, + "uri": "https://{canondata_backend}/1920236/e2416b57cd9baa140c086892d357d5945ed0fdb1/resource.tar.gz#test.test_blocks-xor_opt_scalar-default.txt-Results_/results.txt" + } + ], "test.test[column_order-values-default.txt-Debug]": [ { "checksum": "ec4c1859bead1f9b88e6239fe8d6addb", diff --git a/yql/essentials/tests/sql/minirun/part1/canondata/result.json b/yql/essentials/tests/sql/minirun/part1/canondata/result.json index 88aa38f202f..4ce5118f55e 100644 --- a/yql/essentials/tests/sql/minirun/part1/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part1/canondata/result.json @@ -209,6 +209,27 @@ "uri": "https://{canondata_backend}/1920236/fd3dfd41a8e63d7fa9cb2e8c3d8e6d8d5f51f2cb/resource.tar.gz#test.test_bigdate-tzstrliterals-default.txt-Results_/results.txt" } ], + "test.test[blocks-and_opt_scalar-default.txt-Debug]": [ + { + "checksum": "1a4fb294f178b359c444b4f540e0b9e1", + "size": 1425, + "uri": "https://{canondata_backend}/1920236/0ae0061e7a37e74785c20a7b0e1cfe4b3655ad32/resource.tar.gz#test.test_blocks-and_opt_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-and_opt_scalar-default.txt-Peephole]": [ + { + "checksum": "e410280186ee325d3b67ac78de5f8e36", + "size": 1814, + "uri": "https://{canondata_backend}/1920236/0ae0061e7a37e74785c20a7b0e1cfe4b3655ad32/resource.tar.gz#test.test_blocks-and_opt_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-and_opt_scalar-default.txt-Results]": [ + { + "checksum": "e0c63045084dabe914309f6294a84814", + "size": 11604, + "uri": "https://{canondata_backend}/1920236/0ae0061e7a37e74785c20a7b0e1cfe4b3655ad32/resource.tar.gz#test.test_blocks-and_opt_scalar-default.txt-Results_/results.txt" + } + ], "test.test[blocks-empty_as_table-default.txt-Debug]": [ { "checksum": "02505b6facd77cffd49cb50c6594bfb4", @@ -230,6 +251,27 @@ "uri": "https://{canondata_backend}/1881367/d69a84f4c03a928385a2fa1e80f00c900ecc2329/resource.tar.gz#test.test_blocks-empty_as_table-default.txt-Results_/results.txt" } ], + "test.test[blocks-or_scalar-default.txt-Debug]": [ + { + "checksum": "9153a8e9df67920deba9d895e8d4a8b1", + "size": 1021, + "uri": "https://{canondata_backend}/1920236/0ae0061e7a37e74785c20a7b0e1cfe4b3655ad32/resource.tar.gz#test.test_blocks-or_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-or_scalar-default.txt-Peephole]": [ + { + "checksum": "ece0c5618fe0b4818ea7c0c6b6e588e0", + "size": 1389, + "uri": "https://{canondata_backend}/1920236/0ae0061e7a37e74785c20a7b0e1cfe4b3655ad32/resource.tar.gz#test.test_blocks-or_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-or_scalar-default.txt-Results]": [ + { + "checksum": "4aa1c5107d5f9a190a27268bcd666b95", + "size": 4182, + "uri": "https://{canondata_backend}/1920236/0ae0061e7a37e74785c20a7b0e1cfe4b3655ad32/resource.tar.gz#test.test_blocks-or_scalar-default.txt-Results_/results.txt" + } + ], "test.test[compute_range-tuples_compare-default.txt-Debug]": [ { "checksum": "501d11676cf33c61787adfa1afed5db6", diff --git a/yql/essentials/tests/sql/minirun/part2/canondata/result.json b/yql/essentials/tests/sql/minirun/part2/canondata/result.json index 48b245776bc..4c2099af44d 100644 --- a/yql/essentials/tests/sql/minirun/part2/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part2/canondata/result.json @@ -237,6 +237,27 @@ "uri": "https://{canondata_backend}/1925821/c218142dee7e94289607cb3f387a4ea325fdeb89/resource.tar.gz#test.test_binding-tie_scalar_context-default.txt-Results_/results.txt" } ], + "test.test[blocks-exists-default.txt-Debug]": [ + { + "checksum": "a871029504a6d3f1c07342493b86d28d", + "size": 369, + "uri": "https://{canondata_backend}/1942671/13a781c07395a2ba482afc02d12bb4a6fa60d5ef/resource.tar.gz#test.test_blocks-exists-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-exists-default.txt-Peephole]": [ + { + "checksum": "489280aa6951c20dbd91012493e95323", + "size": 539, + "uri": "https://{canondata_backend}/1942671/13a781c07395a2ba482afc02d12bb4a6fa60d5ef/resource.tar.gz#test.test_blocks-exists-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-exists-default.txt-Results]": [ + { + "checksum": "15f95c7f7b643af3eeb7c995172ca272", + "size": 774, + "uri": "https://{canondata_backend}/1942671/13a781c07395a2ba482afc02d12bb4a6fa60d5ef/resource.tar.gz#test.test_blocks-exists-default.txt-Results_/results.txt" + } + ], "test.test[compute_range-in_literal_nulls-default.txt-Debug]": [ { "checksum": "32fad62c2c315c6dad7fe390ba7f40a8", diff --git a/yql/essentials/tests/sql/minirun/part3/canondata/result.json b/yql/essentials/tests/sql/minirun/part3/canondata/result.json index 1d51ed7623a..4db0b286873 100644 --- a/yql/essentials/tests/sql/minirun/part3/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part3/canondata/result.json @@ -285,6 +285,27 @@ "uri": "file://test.test_bitcast_implicit-div_bitcast-default.txt-Results_/extracted" } ], + "test.test[blocks-or_opt-default.txt-Debug]": [ + { + "checksum": "85fb6a988595cab34e899acfd0ef8dd2", + "size": 693, + "uri": "https://{canondata_backend}/1920236/9bbaee93ec54cd7cbc4c6311c4df2e94db14c07e/resource.tar.gz#test.test_blocks-or_opt-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-or_opt-default.txt-Peephole]": [ + { + "checksum": "845329e7352cf454e326edeac8a39237", + "size": 879, + "uri": "https://{canondata_backend}/1920236/9bbaee93ec54cd7cbc4c6311c4df2e94db14c07e/resource.tar.gz#test.test_blocks-or_opt-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-or_opt-default.txt-Results]": [ + { + "checksum": "d65a0b1dcc9a03b3b6bcfb46ce542f51", + "size": 1763, + "uri": "https://{canondata_backend}/1920236/9bbaee93ec54cd7cbc4c6311c4df2e94db14c07e/resource.tar.gz#test.test_blocks-or_opt-default.txt-Results_/results.txt" + } + ], "test.test[compute_range-tztypes-default.txt-Debug]": [ { "checksum": "f16da776935c59e7de9005d2e87056e7", diff --git a/yql/essentials/tests/sql/minirun/part4/canondata/result.json b/yql/essentials/tests/sql/minirun/part4/canondata/result.json index 6486e6dbc7d..02a5ceee0ce 100644 --- a/yql/essentials/tests/sql/minirun/part4/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part4/canondata/result.json @@ -293,6 +293,27 @@ "uri": "https://{canondata_backend}/1925821/db505909f0fb5dcb9a1c2635b652923e2e5d33c8/resource.tar.gz#test.test_binding-compact_named_with_subq_contexts--Results_/results.txt" } ], + "test.test[blocks-or_opt_scalar-default.txt-Debug]": [ + { + "checksum": "48438c52974cf1f5de5ed35df99e54b5", + "size": 1419, + "uri": "https://{canondata_backend}/1916746/09c919bce0458a8ce66d1cb974cd8dba5513025d/resource.tar.gz#test.test_blocks-or_opt_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-or_opt_scalar-default.txt-Peephole]": [ + { + "checksum": "ab501477ca29cbf2b360f0e80d7bc1e2", + "size": 1808, + "uri": "https://{canondata_backend}/1916746/09c919bce0458a8ce66d1cb974cd8dba5513025d/resource.tar.gz#test.test_blocks-or_opt_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-or_opt_scalar-default.txt-Results]": [ + { + "checksum": "da8a92d6c533e8d1e4604da0dc1a162b", + "size": 11580, + "uri": "https://{canondata_backend}/1916746/09c919bce0458a8ce66d1cb974cd8dba5513025d/resource.tar.gz#test.test_blocks-or_opt_scalar-default.txt-Results_/results.txt" + } + ], "test.test[case-case_many_val--Debug]": [ { "checksum": "291fd94793b3188fe2e609ff400be242", diff --git a/yql/essentials/tests/sql/minirun/part5/canondata/result.json b/yql/essentials/tests/sql/minirun/part5/canondata/result.json index 67d87a83508..406b42e25d6 100644 --- a/yql/essentials/tests/sql/minirun/part5/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part5/canondata/result.json @@ -324,6 +324,27 @@ "uri": "file://test.test_bitcast_implicit-mul_bitcast-default.txt-Results_/extracted" } ], + "test.test[blocks-and_opt-default.txt-Debug]": [ + { + "checksum": "5013773b59997d6cfde3ea2a64496340", + "size": 694, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-and_opt-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-and_opt-default.txt-Peephole]": [ + { + "checksum": "b8c85dc4102de70b2fcae3acee2efa3c", + "size": 880, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-and_opt-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-and_opt-default.txt-Results]": [ + { + "checksum": "a24d9a40b4fad511d8370c07ca0ea4f6", + "size": 1767, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-and_opt-default.txt-Results_/results.txt" + } + ], "test.test[blocks-filter-default.txt-Debug]": [ { "checksum": "3dea830ec45f78ed78603576b054b4ca", @@ -345,6 +366,69 @@ "uri": "https://{canondata_backend}/1937150/d87c401e99a94fad9fdc66f7c4a0d9c670b84949/resource.tar.gz#test.test_blocks-filter-default.txt-Results_/results.txt" } ], + "test.test[blocks-not-default.txt-Debug]": [ + { + "checksum": "11ca4c4fbc3e6a5463a95ce9496effdf", + "size": 334, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-not-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-not-default.txt-Peephole]": [ + { + "checksum": "e07fe7e10cb9bca87ca0df3855e30800", + "size": 504, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-not-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-not-default.txt-Results]": [ + { + "checksum": "15f95c7f7b643af3eeb7c995172ca272", + "size": 774, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-not-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-not_opt-default.txt-Debug]": [ + { + "checksum": "c34f7ad888edfc0a8caaa6b4483449a7", + "size": 421, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-not_opt-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-not_opt-default.txt-Peephole]": [ + { + "checksum": "f8c1132586ba55043b160dd90392d223", + "size": 579, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-not_opt-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-not_opt-default.txt-Results]": [ + { + "checksum": "bb45b5bb85b27a621629ef6587d34fdd", + "size": 1093, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-not_opt-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-xor_scalar-default.txt-Debug]": [ + { + "checksum": "01875c4a7756e30537fbaa02d4b70d91", + "size": 1025, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-xor_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-xor_scalar-default.txt-Peephole]": [ + { + "checksum": "b692bb81f6109ff6725a7daa8ce6a643", + "size": 1393, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-xor_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-xor_scalar-default.txt-Results]": [ + { + "checksum": "9c9e0ad35368288f65f7b5e00f7b2154", + "size": 4186, + "uri": "https://{canondata_backend}/1942671/ce51ce34754ddc48cce99d0eb0d68c58043ce298/resource.tar.gz#test.test_blocks-xor_scalar-default.txt-Results_/results.txt" + } + ], "test.test[column_order-union_all_positional-default.txt-Debug]": [ { "checksum": "b136f637022838dde4e7cd35c37911eb", diff --git a/yql/essentials/tests/sql/minirun/part6/canondata/result.json b/yql/essentials/tests/sql/minirun/part6/canondata/result.json index 8bae492b7ab..8c8ddbc9f51 100644 --- a/yql/essentials/tests/sql/minirun/part6/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part6/canondata/result.json @@ -296,6 +296,27 @@ "uri": "file://test.test_bitcast_implicit-mod_bitcast-default.txt-Results_/extracted" } ], + "test.test[blocks-coalesce_scalar-default.txt-Debug]": [ + { + "checksum": "5ee084040bec68362ce741c283ddead6", + "size": 1484, + "uri": "https://{canondata_backend}/1920236/8a88b220fe1ff8b571b6813b812d7623629101fd/resource.tar.gz#test.test_blocks-coalesce_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-coalesce_scalar-default.txt-Peephole]": [ + { + "checksum": "de0d9ee659715c2a884666a8e2ad690c", + "size": 1923, + "uri": "https://{canondata_backend}/1920236/8a88b220fe1ff8b571b6813b812d7623629101fd/resource.tar.gz#test.test_blocks-coalesce_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-coalesce_scalar-default.txt-Results]": [ + { + "checksum": "64c968b3cf2b6f9d005758ad39bde2fa", + "size": 4410, + "uri": "https://{canondata_backend}/1920236/8a88b220fe1ff8b571b6813b812d7623629101fd/resource.tar.gz#test.test_blocks-coalesce_scalar-default.txt-Results_/results.txt" + } + ], "test.test[blocks-projection_add_ints_filter-default.txt-Debug]": [ { "checksum": "0dc7c149ab903b62717b7afe506ab893", diff --git a/yql/essentials/tests/sql/minirun/part7/canondata/result.json b/yql/essentials/tests/sql/minirun/part7/canondata/result.json index 8c7584fdbdd..e4d2c99469a 100644 --- a/yql/essentials/tests/sql/minirun/part7/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part7/canondata/result.json @@ -209,6 +209,27 @@ "uri": "https://{canondata_backend}/1920236/d08588ad74710b9926df45a5b372c37153cb8b1e/resource.tar.gz#test.test_bigdate-misc-default.txt-Results_/results.txt" } ], + "test.test[blocks-or-default.txt-Debug]": [ + { + "checksum": "4c3c28b4c505737765e9379d3386b4ff", + "size": 495, + "uri": "https://{canondata_backend}/1942671/a9486852a02ad9ecba5005ac92cde1261882e326/resource.tar.gz#test.test_blocks-or-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-or-default.txt-Peephole]": [ + { + "checksum": "e86101ef3ffbf79e56099e81ec6bc0fb", + "size": 681, + "uri": "https://{canondata_backend}/1942671/a9486852a02ad9ecba5005ac92cde1261882e326/resource.tar.gz#test.test_blocks-or-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-or-default.txt-Results]": [ + { + "checksum": "b0336f85016207ce0e9926ea3712616f", + "size": 926, + "uri": "https://{canondata_backend}/1942671/a9486852a02ad9ecba5005ac92cde1261882e326/resource.tar.gz#test.test_blocks-or-default.txt-Results_/results.txt" + } + ], "test.test[case-case_opt_then-default.txt-Debug]": [ { "checksum": "456497d68c16bc496296525c7d2fadd5", diff --git a/yql/essentials/tests/sql/minirun/part8/canondata/result.json b/yql/essentials/tests/sql/minirun/part8/canondata/result.json index 882d4a17409..a041fe1469d 100644 --- a/yql/essentials/tests/sql/minirun/part8/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part8/canondata/result.json @@ -352,6 +352,69 @@ "uri": "https://{canondata_backend}/1031349/4d0c6ce1905689c65e264d15d770d36efcd9426f/resource.tar.gz#test.test_binding-named_expr_input-default.txt-Results_/results.txt" } ], + "test.test[blocks-and_scalar-default.txt-Debug]": [ + { + "checksum": "e5ccc5c53756e09ded8e82b6d662e5e9", + "size": 1025, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-and_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-and_scalar-default.txt-Peephole]": [ + { + "checksum": "d7eb4215f3447f164802a0fa8a9e93f6", + "size": 1393, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-and_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-and_scalar-default.txt-Results]": [ + { + "checksum": "652311e95f643de8f49049f0aedae6a9", + "size": 4190, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-and_scalar-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-if-default.txt-Debug]": [ + { + "checksum": "05045689a237cf4db264b77935b5a418", + "size": 513, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-if-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-if-default.txt-Peephole]": [ + { + "checksum": "c8b3668a80da61f1695e1f4c95558f4c", + "size": 717, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-if-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-if-default.txt-Results]": [ + { + "checksum": "70e56eadbe1f881e5983d36a1d4e9289", + "size": 768, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-if-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-xor_opt-default.txt-Debug]": [ + { + "checksum": "91e8a0bee949446ecd2a7ed7703756fe", + "size": 694, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-xor_opt-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-xor_opt-default.txt-Peephole]": [ + { + "checksum": "9dfc3fbfce576e0daed66ae740e44d5c", + "size": 880, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-xor_opt-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-xor_opt-default.txt-Results]": [ + { + "checksum": "5f40d45719c74387b7ca04e25297030a", + "size": 1642, + "uri": "https://{canondata_backend}/1942671/1fe07dc7779a4d1b05048ad4f78bfbeb3a86d998/resource.tar.gz#test.test_blocks-xor_opt-default.txt-Results_/results.txt" + } + ], "test.test[compute_range-in2-default.txt-Debug]": [ { "checksum": "bd691b0c2a87038767feddb27bbdf790", diff --git a/yql/essentials/tests/sql/minirun/part9/canondata/result.json b/yql/essentials/tests/sql/minirun/part9/canondata/result.json index 0de609513ce..84ff18d5853 100644 --- a/yql/essentials/tests/sql/minirun/part9/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part9/canondata/result.json @@ -167,6 +167,48 @@ "uri": "https://{canondata_backend}/1881367/0904eef9815dbdae5991888c9e683a7d755b2751/resource.tar.gz#test.test_bigdate-tzcasts-default.txt-Results_/results.txt" } ], + "test.test[blocks-coalesce-default.txt-Debug]": [ + { + "checksum": "4f09982cc6cf8782ef9874681dd4f689", + "size": 748, + "uri": "https://{canondata_backend}/1920236/19a9934ebc9455bf1caab37058331acdf3c4ee26/resource.tar.gz#test.test_blocks-coalesce-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-coalesce-default.txt-Peephole]": [ + { + "checksum": "22b6a7673a01385d879856dc322c94aa", + "size": 1135, + "uri": "https://{canondata_backend}/1920236/19a9934ebc9455bf1caab37058331acdf3c4ee26/resource.tar.gz#test.test_blocks-coalesce-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-coalesce-default.txt-Results]": [ + { + "checksum": "4faf752754abb7688da94aff91e59187", + "size": 1913, + "uri": "https://{canondata_backend}/1920236/19a9934ebc9455bf1caab37058331acdf3c4ee26/resource.tar.gz#test.test_blocks-coalesce-default.txt-Results_/results.txt" + } + ], + "test.test[blocks-if_scalar-default.txt-Debug]": [ + { + "checksum": "b1316cc011f1941633e8e78e1297ac0b", + "size": 1600, + "uri": "https://{canondata_backend}/1920236/19a9934ebc9455bf1caab37058331acdf3c4ee26/resource.tar.gz#test.test_blocks-if_scalar-default.txt-Debug_/opt.yql" + } + ], + "test.test[blocks-if_scalar-default.txt-Peephole]": [ + { + "checksum": "e2ee0df7a6e82c32e4bb81445125cf8c", + "size": 1995, + "uri": "https://{canondata_backend}/1920236/19a9934ebc9455bf1caab37058331acdf3c4ee26/resource.tar.gz#test.test_blocks-if_scalar-default.txt-Peephole_/opt.yql" + } + ], + "test.test[blocks-if_scalar-default.txt-Results]": [ + { + "checksum": "df253a8d45f4edd4ae6fe1e160aab745", + "size": 3466, + "uri": "https://{canondata_backend}/1920236/19a9934ebc9455bf1caab37058331acdf3c4ee26/resource.tar.gz#test.test_blocks-if_scalar-default.txt-Results_/results.txt" + } + ], "test.test[blocks-projection_add_ints-default.txt-Debug]": [ { "checksum": "0dc7c149ab903b62717b7afe506ab893", diff --git a/yql/essentials/tests/sql/sql2yql/canondata/result.json b/yql/essentials/tests/sql/sql2yql/canondata/result.json index 6b6872cb22d..4d5c62cb0bc 100644 --- a/yql/essentials/tests/sql/sql2yql/canondata/result.json +++ b/yql/essentials/tests/sql/sql2yql/canondata/result.json @@ -1315,6 +1315,48 @@ "uri": "https://{canondata_backend}/1942173/99e88108149e222741552e7e6cddef041d6a2846/resource.tar.gz#test_sql2yql.test_bitcast_implicit-sub_bitcast_/sql.yql" } ], + "test_sql2yql.test[blocks-and]": [ + { + "checksum": "e22a52b51ef20174c3b832acb09df01b", + "size": 1334, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-and_/sql.yql" + } + ], + "test_sql2yql.test[blocks-and_opt]": [ + { + "checksum": "a58cadab4f91571296dd3bfffe39e4a5", + "size": 1618, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-and_opt_/sql.yql" + } + ], + "test_sql2yql.test[blocks-and_opt_scalar]": [ + { + "checksum": "0d66875312ecf94d2b5ff973994f321a", + "size": 3970, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-and_opt_scalar_/sql.yql" + } + ], + "test_sql2yql.test[blocks-and_scalar]": [ + { + "checksum": "86b75c285d2db16b994b4110e8b047e8", + "size": 3196, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-and_scalar_/sql.yql" + } + ], + "test_sql2yql.test[blocks-coalesce]": [ + { + "checksum": "d407fef7972254e7c63c8b55750b8d4a", + "size": 2344, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-coalesce_/sql.yql" + } + ], + "test_sql2yql.test[blocks-coalesce_scalar]": [ + { + "checksum": "3cf278b8eccf4bbed173c5075bffcf53", + "size": 3626, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-coalesce_scalar_/sql.yql" + } + ], "test_sql2yql.test[blocks-empty_as_table]": [ { "checksum": "bbda02d622e3f3c4f698ea1962d9f902", @@ -1322,6 +1364,13 @@ "uri": "https://{canondata_backend}/1130705/7bfa4c7bef8ecf6ffba8b79d210708dc39bab04e/resource.tar.gz#test_sql2yql.test_blocks-empty_as_table_/sql.yql" } ], + "test_sql2yql.test[blocks-exists]": [ + { + "checksum": "47e9cf5d9689b919bb4530500ce8ec4a", + "size": 1164, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-exists_/sql.yql" + } + ], "test_sql2yql.test[blocks-filter]": [ { "checksum": "e09ada2d8790a1c8d43bdc76683eaa40", @@ -1329,6 +1378,62 @@ "uri": "https://{canondata_backend}/1130705/7bfa4c7bef8ecf6ffba8b79d210708dc39bab04e/resource.tar.gz#test_sql2yql.test_blocks-filter_/sql.yql" } ], + "test_sql2yql.test[blocks-if]": [ + { + "checksum": "2b573fa3534410c28b1273b496c93231", + "size": 1279, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-if_/sql.yql" + } + ], + "test_sql2yql.test[blocks-if_scalar]": [ + { + "checksum": "558f449d59c79295c2cf2627dda60c2b", + "size": 3560, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-if_scalar_/sql.yql" + } + ], + "test_sql2yql.test[blocks-not]": [ + { + "checksum": "60ffa8348b787bc96b78945aa79545d2", + "size": 1117, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-not_/sql.yql" + } + ], + "test_sql2yql.test[blocks-not_opt]": [ + { + "checksum": "9794c07062ac409dc6b46b1a36022afd", + "size": 1143, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-not_opt_/sql.yql" + } + ], + "test_sql2yql.test[blocks-or]": [ + { + "checksum": "1e7e91aab2807a411a6a8b24ff2db384", + "size": 1333, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-or_/sql.yql" + } + ], + "test_sql2yql.test[blocks-or_opt]": [ + { + "checksum": "e090b0180ef21bae3b2eefb8fc9e0df0", + "size": 1617, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-or_opt_/sql.yql" + } + ], + "test_sql2yql.test[blocks-or_opt_scalar]": [ + { + "checksum": "93a46964c0761ee46c67eec9c0cb2412", + "size": 3964, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-or_opt_scalar_/sql.yql" + } + ], + "test_sql2yql.test[blocks-or_scalar]": [ + { + "checksum": "fe396517e379e51b954c53dd35488634", + "size": 3192, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-or_scalar_/sql.yql" + } + ], "test_sql2yql.test[blocks-projection_add_ints]": [ { "checksum": "f84fc85138d4f1d4b72cf4d37a2b8ff2", @@ -1343,6 +1448,34 @@ "uri": "https://{canondata_backend}/1130705/7bfa4c7bef8ecf6ffba8b79d210708dc39bab04e/resource.tar.gz#test_sql2yql.test_blocks-projection_add_ints_filter_/sql.yql" } ], + "test_sql2yql.test[blocks-xor]": [ + { + "checksum": "879bea5e15aa53dc4f3444f0fa17de49", + "size": 1334, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-xor_/sql.yql" + } + ], + "test_sql2yql.test[blocks-xor_opt]": [ + { + "checksum": "306b7e6a7500c99ce78901184c1fe8ce", + "size": 1618, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-xor_opt_/sql.yql" + } + ], + "test_sql2yql.test[blocks-xor_opt_scalar]": [ + { + "checksum": "57d1a6e3d4df6ed584d437b53d890973", + "size": 3970, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-xor_opt_scalar_/sql.yql" + } + ], + "test_sql2yql.test[blocks-xor_scalar]": [ + { + "checksum": "560b06897ca58ccec91fc77dc29d50b7", + "size": 3196, + "uri": "https://{canondata_backend}/1916746/15a617669fb2b654b6be1fc493d61b99fb1f6f81/resource.tar.gz#test_sql2yql.test_blocks-xor_scalar_/sql.yql" + } + ], "test_sql2yql.test[case-case_many_val]": [ { "checksum": "70c9fb3c41da9a56ff7346cfe50d2c82", @@ -7876,16 +8009,91 @@ "uri": "file://test_sql_format.test_bitcast_implicit-sub_bitcast_/formatted.sql" } ], + "test_sql_format.test[blocks-and]": [ + { + "uri": "file://test_sql_format.test_blocks-and_/formatted.sql" + } + ], + "test_sql_format.test[blocks-and_opt]": [ + { + "uri": "file://test_sql_format.test_blocks-and_opt_/formatted.sql" + } + ], + "test_sql_format.test[blocks-and_opt_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-and_opt_scalar_/formatted.sql" + } + ], + "test_sql_format.test[blocks-and_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-and_scalar_/formatted.sql" + } + ], + "test_sql_format.test[blocks-coalesce]": [ + { + "uri": "file://test_sql_format.test_blocks-coalesce_/formatted.sql" + } + ], + "test_sql_format.test[blocks-coalesce_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-coalesce_scalar_/formatted.sql" + } + ], "test_sql_format.test[blocks-empty_as_table]": [ { "uri": "file://test_sql_format.test_blocks-empty_as_table_/formatted.sql" } ], + "test_sql_format.test[blocks-exists]": [ + { + "uri": "file://test_sql_format.test_blocks-exists_/formatted.sql" + } + ], "test_sql_format.test[blocks-filter]": [ { "uri": "file://test_sql_format.test_blocks-filter_/formatted.sql" } ], + "test_sql_format.test[blocks-if]": [ + { + "uri": "file://test_sql_format.test_blocks-if_/formatted.sql" + } + ], + "test_sql_format.test[blocks-if_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-if_scalar_/formatted.sql" + } + ], + "test_sql_format.test[blocks-not]": [ + { + "uri": "file://test_sql_format.test_blocks-not_/formatted.sql" + } + ], + "test_sql_format.test[blocks-not_opt]": [ + { + "uri": "file://test_sql_format.test_blocks-not_opt_/formatted.sql" + } + ], + "test_sql_format.test[blocks-or]": [ + { + "uri": "file://test_sql_format.test_blocks-or_/formatted.sql" + } + ], + "test_sql_format.test[blocks-or_opt]": [ + { + "uri": "file://test_sql_format.test_blocks-or_opt_/formatted.sql" + } + ], + "test_sql_format.test[blocks-or_opt_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-or_opt_scalar_/formatted.sql" + } + ], + "test_sql_format.test[blocks-or_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-or_scalar_/formatted.sql" + } + ], "test_sql_format.test[blocks-projection_add_ints]": [ { "uri": "file://test_sql_format.test_blocks-projection_add_ints_/formatted.sql" @@ -7896,6 +8104,26 @@ "uri": "file://test_sql_format.test_blocks-projection_add_ints_filter_/formatted.sql" } ], + "test_sql_format.test[blocks-xor]": [ + { + "uri": "file://test_sql_format.test_blocks-xor_/formatted.sql" + } + ], + "test_sql_format.test[blocks-xor_opt]": [ + { + "uri": "file://test_sql_format.test_blocks-xor_opt_/formatted.sql" + } + ], + "test_sql_format.test[blocks-xor_opt_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-xor_opt_scalar_/formatted.sql" + } + ], + "test_sql_format.test[blocks-xor_scalar]": [ + { + "uri": "file://test_sql_format.test_blocks-xor_scalar_/formatted.sql" + } + ], "test_sql_format.test[case-case_many_val]": [ { "uri": "file://test_sql_format.test_case-case_many_val_/formatted.sql" diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_/formatted.sql new file mode 100644 index 00000000000..ad92a9f171f --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_/formatted.sql @@ -0,0 +1,12 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, +]; + +SELECT + x AND y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_opt_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_opt_/formatted.sql new file mode 100644 index 00000000000..2a1fcc93e34 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_opt_/formatted.sql @@ -0,0 +1,17 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: FALSE, y: NULL|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, + <|x: TRUE, y: NULL|>, + <|x: NULL, y: FALSE|>, + <|x: NULL, y: TRUE|>, + <|x: NULL, y: NULL|>, +]; + +SELECT + x AND y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_opt_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_opt_scalar_/formatted.sql new file mode 100644 index 00000000000..535272fddd6 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_opt_scalar_/formatted.sql @@ -0,0 +1,31 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: FALSE, y: NULL|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, + <|x: TRUE, y: NULL|>, + <|x: NULL, y: FALSE|>, + <|x: NULL, y: TRUE|>, + <|x: NULL, y: NULL|>, +]; + +SELECT + x, + y, + Opaque(FALSE) AND y, + Opaque(TRUE) AND y, + Opaque(Nothing(bool?)) AND y +FROM + as_table($data) +; + +SELECT + x, + y, + x AND Opaque(FALSE), + x AND Opaque(TRUE), + x AND Opaque(Nothing(bool?)) +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_scalar_/formatted.sql new file mode 100644 index 00000000000..4554fb07a17 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-and_scalar_/formatted.sql @@ -0,0 +1,24 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, +]; + +SELECT + x, + y, + x AND Opaque(FALSE), + x AND Opaque(TRUE) +FROM + as_table($data) +; + +SELECT + x, + y, + Opaque(FALSE) AND y, + Opaque(TRUE) AND y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-coalesce_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-coalesce_/formatted.sql new file mode 100644 index 00000000000..2f557297908 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-coalesce_/formatted.sql @@ -0,0 +1,22 @@ +$data1 = [ + <|x: nothing(int32?), y: 10|>, + <|x: just(1), y: 10|>, +]; + +$data2 = [ + <|x: nothing(int32?), y: just(10)|>, + <|x: just(1), y: just(10)|>, + <|x: just(1), y: nothing(int32?)|>, +]; + +SELECT + x ?? y +FROM + as_table($data1) +; + +SELECT + x ?? y +FROM + as_table($data2) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-coalesce_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-coalesce_scalar_/formatted.sql new file mode 100644 index 00000000000..8a6c5a8c6c8 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-coalesce_scalar_/formatted.sql @@ -0,0 +1,27 @@ +$data1 = [ + <|x: nothing(int32?), y: 10|>, + <|x: just(1), y: 10|>, +]; + +$data2 = [ + <|x: nothing(int32?), y: just(10)|>, + <|x: just(1), y: just(10)|>, + <|x: just(1), y: nothing(int32?)|>, +]; + +SELECT + x ?? Opaque(10), + Opaque(nothing(int32?)) ?? y, + Opaque(just(1)) ?? y +FROM + as_table($data1) +; + +SELECT + x ?? Opaque(just(10)), + x ?? Opaque(nothing(int32?)), + Opaque(nothing(int32?)) ?? y, + Opaque(just(1)) ?? y +FROM + as_table($data2) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-exists_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-exists_/formatted.sql new file mode 100644 index 00000000000..e882cc96ffb --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-exists_/formatted.sql @@ -0,0 +1,7 @@ +$data = [<|x: nothing(int32?)|>, <|x: just(1)|>]; + +SELECT + x IS NOT NULL +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-if_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-if_/formatted.sql new file mode 100644 index 00000000000..7ddd9c0c88a --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-if_/formatted.sql @@ -0,0 +1,10 @@ +$data = [ + <|x: FALSE, y: 1, z: 2|>, + <|x: TRUE, y: 3, z: 4|>, +]; + +SELECT + if(x, y, z) +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-if_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-if_scalar_/formatted.sql new file mode 100644 index 00000000000..03bdd924984 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-if_scalar_/formatted.sql @@ -0,0 +1,22 @@ +$data = [ + <|x: FALSE, y: 1, z: 2|>, + <|x: TRUE, y: 3, z: 4|>, +]; + +SELECT + x, + if(Opaque(FALSE), y, z), + if(Opaque(TRUE), y, z), + if(x, Opaque(5), z), + if(x, 5, Opaque(6)) +FROM + as_table($data) +; + +SELECT + x, + if(Opaque(FALSE), Opaque(5), z), + if(Opaque(TRUE), y, Opaque(6)) +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-not_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-not_/formatted.sql new file mode 100644 index 00000000000..29eba165b77 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-not_/formatted.sql @@ -0,0 +1,7 @@ +$data = [<|x: TRUE|>, <|x: FALSE|>]; + +SELECT + NOT x +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-not_opt_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-not_opt_/formatted.sql new file mode 100644 index 00000000000..0a716962d57 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-not_opt_/formatted.sql @@ -0,0 +1,7 @@ +$data = [<|x: TRUE|>, <|x: FALSE|>, <|x: NULL|>]; + +SELECT + NOT x +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_/formatted.sql new file mode 100644 index 00000000000..72cdace788a --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_/formatted.sql @@ -0,0 +1,12 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, +]; + +SELECT + x OR y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_opt_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_opt_/formatted.sql new file mode 100644 index 00000000000..7ebe9eca9f6 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_opt_/formatted.sql @@ -0,0 +1,17 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: FALSE, y: NULL|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, + <|x: TRUE, y: NULL|>, + <|x: NULL, y: FALSE|>, + <|x: NULL, y: TRUE|>, + <|x: NULL, y: NULL|>, +]; + +SELECT + x OR y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_opt_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_opt_scalar_/formatted.sql new file mode 100644 index 00000000000..5d3ac793419 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_opt_scalar_/formatted.sql @@ -0,0 +1,31 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: FALSE, y: NULL|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, + <|x: TRUE, y: NULL|>, + <|x: NULL, y: FALSE|>, + <|x: NULL, y: TRUE|>, + <|x: NULL, y: NULL|>, +]; + +SELECT + x, + y, + Opaque(FALSE) OR y, + Opaque(TRUE) OR y, + Opaque(Nothing(bool?)) OR y +FROM + as_table($data) +; + +SELECT + x, + y, + x OR Opaque(FALSE), + x OR Opaque(TRUE), + x OR Opaque(Nothing(bool?)) +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_scalar_/formatted.sql new file mode 100644 index 00000000000..a9867172286 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-or_scalar_/formatted.sql @@ -0,0 +1,24 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, +]; + +SELECT + x, + y, + x OR Opaque(FALSE), + x OR Opaque(TRUE) +FROM + as_table($data) +; + +SELECT + x, + y, + Opaque(FALSE) OR y, + Opaque(TRUE) OR y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_/formatted.sql new file mode 100644 index 00000000000..e91b132c775 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_/formatted.sql @@ -0,0 +1,12 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, +]; + +SELECT + x XOR y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_opt_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_opt_/formatted.sql new file mode 100644 index 00000000000..2085ea9697f --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_opt_/formatted.sql @@ -0,0 +1,17 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: FALSE, y: NULL|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, + <|x: TRUE, y: NULL|>, + <|x: NULL, y: FALSE|>, + <|x: NULL, y: TRUE|>, + <|x: NULL, y: NULL|>, +]; + +SELECT + x XOR y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_opt_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_opt_scalar_/formatted.sql new file mode 100644 index 00000000000..4c01d983bba --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_opt_scalar_/formatted.sql @@ -0,0 +1,31 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: FALSE, y: NULL|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, + <|x: TRUE, y: NULL|>, + <|x: NULL, y: FALSE|>, + <|x: NULL, y: TRUE|>, + <|x: NULL, y: NULL|>, +]; + +SELECT + x, + y, + Opaque(FALSE) XOR y, + Opaque(TRUE) XOR y, + Opaque(Nothing(bool?)) XOR y +FROM + as_table($data) +; + +SELECT + x, + y, + x XOR Opaque(FALSE), + x XOR Opaque(TRUE), + x XOR Opaque(Nothing(bool?)) +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_scalar_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_scalar_/formatted.sql new file mode 100644 index 00000000000..f85c38896a8 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_blocks-xor_scalar_/formatted.sql @@ -0,0 +1,24 @@ +$data = [ + <|x: FALSE, y: FALSE|>, + <|x: FALSE, y: TRUE|>, + <|x: TRUE, y: FALSE|>, + <|x: TRUE, y: TRUE|>, +]; + +SELECT + x, + y, + x XOR Opaque(FALSE), + x XOR Opaque(TRUE) +FROM + as_table($data) +; + +SELECT + x, + y, + Opaque(FALSE) XOR y, + Opaque(TRUE) XOR y +FROM + as_table($data) +; diff --git a/yql/essentials/tests/sql/suites/blocks/and.sql b/yql/essentials/tests/sql/suites/blocks/and.sql new file mode 100644 index 00000000000..e8e69e37a4c --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/and.sql @@ -0,0 +1,8 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:true,y:false|>, + <|x:true,y:true|>, +]; + +select x and y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/and_opt.sql b/yql/essentials/tests/sql/suites/blocks/and_opt.sql new file mode 100644 index 00000000000..b26fb42bf0d --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/and_opt.sql @@ -0,0 +1,13 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:false,y:null|>, + <|x:true,y:false|>, + <|x:true,y:true|>, + <|x:true,y:null|>, + <|x:null,y:false|>, + <|x:null,y:true|>, + <|x:null,y:null|>, +]; + +select x and y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/and_opt_scalar.sql b/yql/essentials/tests/sql/suites/blocks/and_opt_scalar.sql new file mode 100644 index 00000000000..1c11b2e9b52 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/and_opt_scalar.sql @@ -0,0 +1,14 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:false,y:null|>, + <|x:true,y:false|>, + <|x:true,y:true|>, + <|x:true,y:null|>, + <|x:null,y:false|>, + <|x:null,y:true|>, + <|x:null,y:null|>, +]; + +select x,y,Opaque(false) and y,Opaque(true) and y,Opaque(Nothing(bool?)) and y from as_table($data); +select x,y,x and Opaque(false),x and Opaque(true),x and Opaque(Nothing(bool?)) from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/and_scalar.sql b/yql/essentials/tests/sql/suites/blocks/and_scalar.sql new file mode 100644 index 00000000000..a02d79ffae3 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/and_scalar.sql @@ -0,0 +1,9 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:true,y:false|>, + <|x:true,y:true|>, +]; + +select x,y,x and Opaque(false),x and Opaque(true) from as_table($data); +select x,y,Opaque(false) and y,Opaque(true) and y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/coalesce.sql b/yql/essentials/tests/sql/suites/blocks/coalesce.sql new file mode 100644 index 00000000000..49be4b14065 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/coalesce.sql @@ -0,0 +1,14 @@ +$data1 = [ + <|x:nothing(int32?),y:10|>, + <|x:just(1),y:10|>, +]; + +$data2 = [ + <|x:nothing(int32?),y:just(10)|>, + <|x:just(1),y:just(10)|>, + <|x:just(1),y:nothing(int32?)|>, +]; + +select x ?? y from as_table($data1); + +select x ?? y from as_table($data2); diff --git a/yql/essentials/tests/sql/suites/blocks/coalesce_scalar.sql b/yql/essentials/tests/sql/suites/blocks/coalesce_scalar.sql new file mode 100644 index 00000000000..684082c7235 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/coalesce_scalar.sql @@ -0,0 +1,14 @@ +$data1 = [ + <|x:nothing(int32?),y:10|>, + <|x:just(1),y:10|>, +]; + +$data2 = [ + <|x:nothing(int32?),y:just(10)|>, + <|x:just(1),y:just(10)|>, + <|x:just(1),y:nothing(int32?)|>, +]; + +select x ?? Opaque(10), Opaque(nothing(int32?)) ?? y, Opaque(just(1)) ?? y from as_table($data1); + +select x ?? Opaque(just(10)),x ?? Opaque(nothing(int32?)),Opaque(nothing(int32?)) ?? y,Opaque(just(1)) ?? y from as_table($data2); diff --git a/yql/essentials/tests/sql/suites/blocks/exists.sql b/yql/essentials/tests/sql/suites/blocks/exists.sql new file mode 100644 index 00000000000..1f170ffc5cc --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/exists.sql @@ -0,0 +1,3 @@ +$data = [<|x:nothing(int32?)|>,<|x:just(1)|>]; + +select x is not null from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/if.sql b/yql/essentials/tests/sql/suites/blocks/if.sql new file mode 100644 index 00000000000..bc4fbb82dca --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/if.sql @@ -0,0 +1,6 @@ +$data = [ + <|x:false,y:1,z:2|>, + <|x:true,y:3,z:4|>, +]; + +select if(x,y,z) from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/if_scalar.sql b/yql/essentials/tests/sql/suites/blocks/if_scalar.sql new file mode 100644 index 00000000000..4eedc26bfc5 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/if_scalar.sql @@ -0,0 +1,7 @@ +$data = [ + <|x:false,y:1,z:2|>, + <|x:true,y:3,z:4|>, +]; + +select x,if(Opaque(false),y,z),if(Opaque(true),y,z),if(x,Opaque(5),z),if(x,5,Opaque(6)) from as_table($data); +select x,if(Opaque(false),Opaque(5),z),if(Opaque(true),y,Opaque(6)) from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/not.sql b/yql/essentials/tests/sql/suites/blocks/not.sql new file mode 100644 index 00000000000..9a95ad56276 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/not.sql @@ -0,0 +1,3 @@ +$data = [<|x:true|>,<|x:false|>]; + +select not x from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/not_opt.sql b/yql/essentials/tests/sql/suites/blocks/not_opt.sql new file mode 100644 index 00000000000..dcb47762db8 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/not_opt.sql @@ -0,0 +1,3 @@ +$data = [<|x:true|>,<|x:false|>,<|x:null|>]; + +select not x from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/or.sql b/yql/essentials/tests/sql/suites/blocks/or.sql new file mode 100644 index 00000000000..32ad70eb33f --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/or.sql @@ -0,0 +1,8 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:true,y:false|>, + <|x:true,y:true|>, +]; + +select x or y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/or_opt.sql b/yql/essentials/tests/sql/suites/blocks/or_opt.sql new file mode 100644 index 00000000000..015f7b0658f --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/or_opt.sql @@ -0,0 +1,13 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:false,y:null|>, + <|x:true,y:false|>, + <|x:true,y:true|>, + <|x:true,y:null|>, + <|x:null,y:false|>, + <|x:null,y:true|>, + <|x:null,y:null|>, +]; + +select x or y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/or_opt_scalar.sql b/yql/essentials/tests/sql/suites/blocks/or_opt_scalar.sql new file mode 100644 index 00000000000..c065180f471 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/or_opt_scalar.sql @@ -0,0 +1,14 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:false,y:null|>, + <|x:true,y:false|>, + <|x:true,y:true|>, + <|x:true,y:null|>, + <|x:null,y:false|>, + <|x:null,y:true|>, + <|x:null,y:null|>, +]; + +select x,y,Opaque(false) or y,Opaque(true) or y,Opaque(Nothing(bool?)) or y from as_table($data); +select x,y,x or Opaque(false),x or Opaque(true),x or Opaque(Nothing(bool?)) from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/or_scalar.sql b/yql/essentials/tests/sql/suites/blocks/or_scalar.sql new file mode 100644 index 00000000000..e3437d83552 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/or_scalar.sql @@ -0,0 +1,9 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:true,y:false|>, + <|x:true,y:true|>, +]; + +select x,y,x or Opaque(false),x or Opaque(true) from as_table($data); +select x,y,Opaque(false) or y,Opaque(true) or y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/xor.sql b/yql/essentials/tests/sql/suites/blocks/xor.sql new file mode 100644 index 00000000000..3b1cef3f70d --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/xor.sql @@ -0,0 +1,8 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:true,y:false|>, + <|x:true,y:true|>, +]; + +select x xor y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/xor_opt.sql b/yql/essentials/tests/sql/suites/blocks/xor_opt.sql new file mode 100644 index 00000000000..086e8b963ef --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/xor_opt.sql @@ -0,0 +1,13 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:false,y:null|>, + <|x:true,y:false|>, + <|x:true,y:true|>, + <|x:true,y:null|>, + <|x:null,y:false|>, + <|x:null,y:true|>, + <|x:null,y:null|>, +]; + +select x xor y from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/xor_opt_scalar.sql b/yql/essentials/tests/sql/suites/blocks/xor_opt_scalar.sql new file mode 100644 index 00000000000..dbfc791ca65 --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/xor_opt_scalar.sql @@ -0,0 +1,14 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:false,y:null|>, + <|x:true,y:false|>, + <|x:true,y:true|>, + <|x:true,y:null|>, + <|x:null,y:false|>, + <|x:null,y:true|>, + <|x:null,y:null|>, +]; + +select x,y,Opaque(false) xor y,Opaque(true) xor y,Opaque(Nothing(bool?)) xor y from as_table($data); +select x,y,x xor Opaque(false),x xor Opaque(true),x xor Opaque(Nothing(bool?)) from as_table($data); diff --git a/yql/essentials/tests/sql/suites/blocks/xor_scalar.sql b/yql/essentials/tests/sql/suites/blocks/xor_scalar.sql new file mode 100644 index 00000000000..84819e7766f --- /dev/null +++ b/yql/essentials/tests/sql/suites/blocks/xor_scalar.sql @@ -0,0 +1,9 @@ +$data = [ + <|x:false,y:false|>, + <|x:false,y:true|>, + <|x:true,y:false|>, + <|x:true,y:true|>, +]; + +select x,y,x xor Opaque(false),x xor Opaque(true) from as_table($data); +select x,y,Opaque(false) xor y,Opaque(true) xor y from as_table($data); diff --git a/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.cpp b/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.cpp index 5d5c5b5901c..7e1de56db05 100644 --- a/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.cpp +++ b/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.cpp @@ -79,6 +79,10 @@ void TParallelFileInputState::Next() { Valid_ = NextValue(); } +TString TParallelFileInputState::DebugInfo() const { + return {}; +} + void TParallelFileInputState::Finish() { TimerAwaiting_.Report(Spec_->JobStats_); MkqlReader_.Finish(); diff --git a/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.h b/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.h index 9288e98fd48..55a9bd80684 100644 --- a/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.h +++ b/yt/yql/providers/yt/comp_nodes/dq/dq_yt_rpc_reader.h @@ -58,6 +58,8 @@ protected: virtual void Next() override; + TString DebugInfo() const override; + void Finish(); void RunNext(); diff --git a/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.cpp b/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.cpp index 023da36b58b..46b2067d5e2 100644 --- a/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.cpp +++ b/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.cpp @@ -3,6 +3,7 @@ #include <yql/essentials/utils/yql_panic.h> #include <util/system/fs.h> +#include <util/string/builder.h> namespace NYql { @@ -59,6 +60,10 @@ bool TFileInputState::NextValue() { } } +TString TFileInputState::DebugInfo() const { + return TStringBuilder() << "TFileInputState{CurrentInput=" << CurrentInput_ << ", CurrentRecord=" << CurrentRecord_ << '}'; +} + TVector<NYT::TRawTableReaderPtr> MakeMkqlFileInputs(const TVector<TString>& files, bool decompress) { TVector<NYT::TRawTableReaderPtr> rawReaders; for (auto& file: files) { diff --git a/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.h b/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.h index d0f0541b950..64db03232dd 100644 --- a/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.h +++ b/yt/yql/providers/yt/comp_nodes/yql_mkql_file_input_state.h @@ -48,6 +48,8 @@ protected: Valid_ = NextValue(); } + virtual TString DebugInfo() const override; + void Finish() { MkqlReader_.Finish(); } diff --git a/yt/yql/providers/yt/comp_nodes/yql_mkql_file_list.cpp b/yt/yql/providers/yt/comp_nodes/yql_mkql_file_list.cpp index 5c65e85c8d7..7d720cbbd5d 100644 --- a/yt/yql/providers/yt/comp_nodes/yql_mkql_file_list.cpp +++ b/yt/yql/providers/yt/comp_nodes/yql_mkql_file_list.cpp @@ -18,12 +18,12 @@ bool TFileListValueBase::TIterator::Next(NUdf::TUnboxedValue& value) { } AtStart_ = false; if (!State_->IsValid()) { - MKQL_ENSURE(!ExpectedLength_ || *ExpectedLength_ == 0, "Invalid file length"); + MKQL_ENSURE(!ExpectedLength_ || *ExpectedLength_ == 0, "Invalid file length, ExpectedLength=" << *ExpectedLength_ << ", State: " << State_->DebugInfo()); return false; } if (ExpectedLength_) { - MKQL_ENSURE(*ExpectedLength_ > 0, "Invalid file length"); + MKQL_ENSURE(*ExpectedLength_ > 0, "Invalid file length. State: " << State_->DebugInfo()); --(*ExpectedLength_); } value = State_->GetCurrent(); diff --git a/yt/yql/providers/yt/comp_nodes/yql_mkql_input_stream.h b/yt/yql/providers/yt/comp_nodes/yql_mkql_input_stream.h index ebd66b43f14..c5e958fe828 100644 --- a/yt/yql/providers/yt/comp_nodes/yql_mkql_input_stream.h +++ b/yt/yql/providers/yt/comp_nodes/yql_mkql_input_stream.h @@ -14,6 +14,7 @@ struct IInputState { virtual bool IsValid() const = 0; virtual NUdf::TUnboxedValue GetCurrent() = 0; virtual void Next() = 0; + virtual TString DebugInfo() const = 0; }; class TInputStreamValue diff --git a/yt/yt/client/api/query_tracker_client.cpp b/yt/yt/client/api/query_tracker_client.cpp index 86633c206b9..f374fa39ee5 100644 --- a/yt/yt/client/api/query_tracker_client.cpp +++ b/yt/yt/client/api/query_tracker_client.cpp @@ -54,7 +54,7 @@ void Serialize(const TQuery& query, NYson::IYsonConsumer* consumer) void Serialize(const TQueryResult& queryResult, NYson::IYsonConsumer* consumer) { - static_assert(pfr::tuple_size<TQueryResult>::value == 6); + static_assert(pfr::tuple_size<TQueryResult>::value == 7); BuildYsonFluently(consumer) .BeginMap() .Item("id").Value(queryResult.Id) @@ -65,6 +65,7 @@ void Serialize(const TQueryResult& queryResult, NYson::IYsonConsumer* consumer) }) .OptionalItem("schema", queryResult.Schema) .Item("is_truncated").Value(queryResult.IsTruncated) + .OptionalItem("full_result", queryResult.FullResult) .Item("data_statistics").Value(queryResult.DataStatistics) .EndMap(); } diff --git a/yt/yt/client/api/query_tracker_client.h b/yt/yt/client/api/query_tracker_client.h index 0e0fc147bf8..2cdcf2cbab4 100644 --- a/yt/yt/client/api/query_tracker_client.h +++ b/yt/yt/client/api/query_tracker_client.h @@ -123,6 +123,7 @@ struct TQueryResult NTableClient::TTableSchemaPtr Schema; NChunkClient::NProto::TDataStatistics DataStatistics; bool IsTruncated; + std::optional<NYson::TYsonString> FullResult; }; void Serialize(const TQueryResult& queryResult, NYson::IYsonConsumer* consumer); diff --git a/yt/yt/client/api/rpc_proxy/client_impl.cpp b/yt/yt/client/api/rpc_proxy/client_impl.cpp index 74e545e7f22..54c04351e1d 100644 --- a/yt/yt/client/api/rpc_proxy/client_impl.cpp +++ b/yt/yt/client/api/rpc_proxy/client_impl.cpp @@ -2325,6 +2325,7 @@ TFuture<TQueryResult> TClient::GetQueryResult( .Schema = rsp->has_schema() ? FromProto<NTableClient::TTableSchemaPtr>(rsp->schema()) : nullptr, .DataStatistics = FromProto<NChunkClient::NProto::TDataStatistics>(rsp->data_statistics()), .IsTruncated = rsp->is_truncated(), + .FullResult = rsp->has_full_result() ? std::make_optional(TYsonString(rsp->full_result())) : std::nullopt, }; })); } diff --git a/yt/yt/client/chaos_client/config.cpp b/yt/yt/client/chaos_client/config.cpp index 2dce364270a..777da43a611 100644 --- a/yt/yt/client/chaos_client/config.cpp +++ b/yt/yt/client/chaos_client/config.cpp @@ -7,7 +7,7 @@ namespace NYT::NChaosClient { void TReplicationCardCacheConfig::Register(TRegistrar registrar) { registrar.Parameter("enable_watching", &TThis::EnableWatching) - .Default(false) + .Default(true) .DontSerializeDefault(); } diff --git a/yt/yt/client/driver/journal_commands.cpp b/yt/yt/client/driver/journal_commands.cpp index 5a999e77093..cff1d62dea9 100644 --- a/yt/yt/client/driver/journal_commands.cpp +++ b/yt/yt/client/driver/journal_commands.cpp @@ -107,6 +107,7 @@ void TReadJournalCommand::DoExecute(ICommandContextPtr context) } if (std::ssize(buffer) > context->GetConfig()->ReadBufferSize) { + consumer->Flush(); flushBuffer(); } } diff --git a/yt/yt/client/table_client/schema.cpp b/yt/yt/client/table_client/schema.cpp index 9cdf7119583..a1a328ac72e 100644 --- a/yt/yt/client/table_client/schema.cpp +++ b/yt/yt/client/table_client/schema.cpp @@ -1021,6 +1021,43 @@ TTableSchemaPtr TTableSchema::ToQuery() const } } +TTableSchemaPtr TTableSchema::WithSystemColumns(const TSystemColumnOptions& options) const +{ + std::vector<TColumnSchema> columns; + auto safeAdd = [&](const std::string& name, const ESimpleLogicalValueType type) { + const auto existing = FindColumn(name); + if (!existing) { + columns.push_back(TColumnSchema(name, type)); + } else if (!existing->IsOfV1Type(type)) { + THROW_ERROR_EXCEPTION("Cannot add column %Qv because of type mismatch", name); + } + }; + + if (options.EnableTableIndex) { + safeAdd(TableIndexColumnName, ESimpleLogicalValueType::Int64); + } + + if (options.EnableRowIndex) { + safeAdd(RowIndexColumnName, ESimpleLogicalValueType::Int64); + } + + if (options.EnableRangeIndex) { + safeAdd(RangeIndexColumnName, ESimpleLogicalValueType::Int64); + } + + if (ColumnInfo_) { + const auto& info = *ColumnInfo_; + columns.insert(columns.end(), info.Columns.begin(), info.Columns.end()); + } + + return New<TTableSchema>( + std::move(columns), + Strict_, + UniqueKeys_, + SchemaModification_, + DeletedColumns()); +} + TTableSchemaPtr TTableSchema::ToWriteViaQueueProducer() const { std::vector<TColumnSchema> columns; @@ -1839,9 +1876,17 @@ void ValidateDynamicTableKeyColumnCount(int count) void ValidateSystemColumnSchema( const TColumnSchema& columnSchema, bool isTableSorted, - bool allowUnversionedUpdateColumns, - bool allowTimestampColumns) -{ + const TSchemaValidationOptions& options) +{ + static const auto allowedOperationSystemColumns = THashMap<std::string, ESimpleLogicalValueType>{ + // Operation system columns are appended in context of job input query. + // Table index column is intentionally disabled in the result of input query, since it can be arbitrarily + // changed by the query itself, and final values would violate assumptions about the possible values of + // $table_index inside format writers. + {RowIndexColumnName, ESimpleLogicalValueType::Int64}, + {RangeIndexColumnName, ESimpleLogicalValueType::Int64}, + }; + static const auto allowedSortedTablesSystemColumns = THashMap<std::string, ESimpleLogicalValueType>{ {EmptyValueColumnName, ESimpleLogicalValueType::Int64}, {TtlColumnName, ESimpleLogicalValueType::Uint64}, @@ -1880,7 +1925,15 @@ void ValidateSystemColumnSchema( return; } - if (allowUnversionedUpdateColumns) { + if (options.AllowOperationColumns) { + auto it = allowedOperationSystemColumns.find(name); + if (it != allowedOperationSystemColumns.end()) { + validateType(it->second); + return; + } + } + + if (options.AllowUnversionedUpdateColumns) { // Unversioned update schema system column. if (name == TUnversionedUpdateSchema::ChangeTypeColumnName) { validateType(ESimpleLogicalValueType::Uint64); @@ -1894,7 +1947,7 @@ void ValidateSystemColumnSchema( } } - if (allowTimestampColumns) { + if (options.AllowTimestampColumns) { if (name.starts_with(TimestampColumnPrefix)) { validateType(ESimpleLogicalValueType::Uint64); return; @@ -1924,8 +1977,7 @@ void ValidateColumnSchema( const TColumnSchema& columnSchema, bool isTableSorted, bool isTableDynamic, - bool allowUnversionedUpdateColumns, - bool allowTimestampColumns) + const TSchemaValidationOptions& options) { static const auto allowedAggregates = THashSet<std::string, THash<TStringBuf>, TEqualTo<>>{ "sum", @@ -1954,8 +2006,7 @@ void ValidateColumnSchema( ValidateSystemColumnSchema( columnSchema, isTableSorted, - allowUnversionedUpdateColumns, - allowTimestampColumns); + options); } { @@ -2293,8 +2344,7 @@ void ValidateSchemaAttributes(const TTableSchema& schema) void ValidateTableSchema( const TTableSchema& schema, bool isTableDynamic, - bool allowUnversionedUpdateColumns, - bool allowTimestampColumns) + const TSchemaValidationOptions& options) { int totalTypeComplexity = 0; for (const auto& column : schema.Columns()) { @@ -2302,8 +2352,7 @@ void ValidateTableSchema( column, schema.IsSorted(), isTableDynamic, - allowUnversionedUpdateColumns, - allowTimestampColumns); + options); if (!schema.GetStrict() && column.IsRenamed()) { THROW_ERROR_EXCEPTION("Renamed column %v in non-strict schema", column.GetDiagnosticNameString()); diff --git a/yt/yt/client/table_client/schema.h b/yt/yt/client/table_client/schema.h index ac36c07435f..f6c9f147a19 100644 --- a/yt/yt/client/table_client/schema.h +++ b/yt/yt/client/table_client/schema.h @@ -230,6 +230,13 @@ public: const TTableSchema& Schema_; }; + struct TSystemColumnOptions + { + bool EnableTableIndex; + bool EnableRowIndex; + bool EnableRangeIndex; + }; + public: const std::vector<TColumnSchema>& Columns() const; const std::vector<TDeletedColumn>& DeletedColumns() const; @@ -328,6 +335,9 @@ public: //! For ordered tables, prepends the current schema with |(tablet_index, row_index)| key columns. TTableSchemaPtr ToQuery() const; + //! Appends |$table_index|, |$row_index| and/or |$range_index|, based on the options. + TTableSchemaPtr WithSystemColumns(const TSystemColumnOptions& options) const; + //! For sorted tables, return the current schema without computed columns. //! For ordered tables, prepends the current schema with |(tablet_index)| key column //! but without |$timestamp| column, if any. @@ -521,18 +531,27 @@ void ValidateDynamicTableKeyColumnCount(int count); void ValidateColumnName(const std::string& name); +//////////////////////////////////////////////////////////////////////////////// + +struct TSchemaValidationOptions +{ + bool AllowUnversionedUpdateColumns = false; + bool AllowTimestampColumns = false; + bool AllowOperationColumns = false; +}; + void ValidateColumnSchema( const TColumnSchema& columnSchema, bool isTableSorted = false, bool isTableDynamic = false, - bool allowUnversionedUpdateColumns = false, - bool allowTimestampColumns = false); + const TSchemaValidationOptions& options = {}); void ValidateTableSchema( const TTableSchema& schema, bool isTableDynamic = false, - bool allowUnversionedUpdateColumns = false, - bool allowTimestampColumns = false); + const TSchemaValidationOptions& options = {}); + +//////////////////////////////////////////////////////////////////////////////// void ValidateNoDescendingSortOrder(const TTableSchema& schema); diff --git a/yt/yt/client/unittests/schema_ut.cpp b/yt/yt/client/unittests/schema_ut.cpp index 4c4b597f0db..83fc60b9d53 100644 --- a/yt/yt/client/unittests/schema_ut.cpp +++ b/yt/yt/client/unittests/schema_ut.cpp @@ -376,6 +376,37 @@ TEST(TTableSchemaTest, ColumnSchemaValidation) {"foo", SimpleLogicalType(ESimpleLogicalValueType::Int64)}, {"bar", SimpleLogicalType(ESimpleLogicalValueType::String)}, }), ESortOrder::Ascending)); + + // Allow some names starting from SystemColumnNamePrefix + EXPECT_NO_THROW( + ValidateColumnSchema( + TColumnSchema(RowIndexColumnName, EValueType::Int64), + /*isTableSorted*/ false, + /*isTableDynamic*/ false, + /*options*/ {.AllowOperationColumns = true}) + ); + EXPECT_NO_THROW( + ValidateColumnSchema( + TColumnSchema(RangeIndexColumnName, EValueType::Int64), + /*isTableSorted*/ false, + /*isTableDynamic*/ false, + /*options*/ {.AllowOperationColumns = true}) + ); + EXPECT_THROW( + ValidateColumnSchema( + TColumnSchema(TableIndexColumnName, EValueType::Int64), + /*isTableSorted*/ false, + /*isTableDynamic*/ false, + /*options*/ {.AllowOperationColumns = true}), + std::exception); + EXPECT_THROW( + ValidateColumnSchema( + TColumnSchema(EmptyValueColumnName, EValueType::Int64), + /*isTableSorted*/ false, + /*isTableDynamic*/ false, + /*options*/ {.AllowOperationColumns = true}), + std::exception); + } TEST(TTableSchemaTest, ValidateTableSchemaTest) @@ -536,6 +567,45 @@ TEST(TTableSchemaTest, ValidateTableSchemaNestedColumns) }); } +TEST(TTableSchemaTest, WithSystemColumns) +{ + const auto schema1 = TTableSchema({ + TColumnSchema("foo", SimpleLogicalType(ESimpleLogicalValueType::Int64)), + }); + + const auto schema2Ptr = schema1.WithSystemColumns({ + .EnableRangeIndex = true, + }); + + EXPECT_EQ(schema2Ptr->Columns().size(), 2u); + EXPECT_TRUE(schema2Ptr->FindColumn("foo")); + EXPECT_TRUE(schema2Ptr->FindColumn(RangeIndexColumnName)); + + const auto schema3Ptr = schema1.WithSystemColumns({ + .EnableTableIndex = true, + .EnableRowIndex = true, + .EnableRangeIndex = true, + }); + + EXPECT_EQ(schema3Ptr->Columns().size(), 4u); + EXPECT_TRUE(schema3Ptr->FindColumn("foo")); + EXPECT_TRUE(schema3Ptr->FindColumn(TableIndexColumnName)); + EXPECT_TRUE(schema3Ptr->FindColumn(RowIndexColumnName)); + EXPECT_TRUE(schema3Ptr->FindColumn(RangeIndexColumnName)); + + EXPECT_EQ(*schema3Ptr, *schema2Ptr->WithSystemColumns({ + .EnableTableIndex = true, + .EnableRowIndex = true, + .EnableRangeIndex = true, + })); + + EXPECT_THROW_WITH_SUBSTRING( + TTableSchema({ + TColumnSchema(RowIndexColumnName, SimpleLogicalType(ESimpleLogicalValueType::String)), + }).WithSystemColumns({.EnableRowIndex = true}), + "Cannot add column"); +} + //////////////////////////////////////////////////////////////////////////////// TEST(TLockMaskTest, Simple) diff --git a/yt/yt/core/bus/tcp/dispatcher_impl.cpp b/yt/yt/core/bus/tcp/dispatcher_impl.cpp index 543bfac8e8f..8e987e753b9 100644 --- a/yt/yt/core/bus/tcp/dispatcher_impl.cpp +++ b/yt/yt/core/bus/tcp/dispatcher_impl.cpp @@ -268,9 +268,11 @@ void TTcpDispatcher::TImpl::CollectSensors(ISensorWriter* writer) std::vector<TTcpConnectionPtr> TTcpDispatcher::TImpl::GetConnections() { + auto connectionList = ConnectionList_.Load(); + std::vector<TTcpConnectionPtr> result; - result.reserve(ConnectionList_.size()); - for (const auto& weakConnection : ConnectionList_) { + result.reserve(connectionList.size()); + for (const auto& weakConnection : connectionList) { if (auto connection = weakConnection.Lock()) { result.push_back(connection); } @@ -318,28 +320,30 @@ IYPathServicePtr TTcpDispatcher::TImpl::GetOrchidService() void TTcpDispatcher::TImpl::OnPeriodicCheck() { - for (auto&& connection : ConnectionsToRegister_.DequeueAll()) { - ConnectionList_.push_back(std::move(connection)); - } - - i64 connectionsToCheck = std::max( - std::ssize(ConnectionList_) * - static_cast<i64>(PeriodicCheckPeriod.GetValue()) / - static_cast<i64>(PerConnectionPeriodicCheckPeriod.GetValue()), - static_cast<i64>(1)); - for (i64 index = 0; index < connectionsToCheck && !ConnectionList_.empty(); ++index) { - auto& weakConnection = ConnectionList_[CurrentConnectionListIndex_]; - if (auto connection = weakConnection.Lock()) { - connection->RunPeriodicCheck(); - ++CurrentConnectionListIndex_; - } else { - std::swap(weakConnection, ConnectionList_.back()); - ConnectionList_.pop_back(); + ConnectionList_.Transform([&] (auto& connectionList) { + for (auto&& connection : ConnectionsToRegister_.DequeueAll()) { + connectionList.push_back(std::move(connection)); } - if (CurrentConnectionListIndex_ >= std::ssize(ConnectionList_)) { - CurrentConnectionListIndex_ = 0; + + i64 connectionsToCheck = std::max( + std::ssize(connectionList) * + static_cast<i64>(PeriodicCheckPeriod.GetValue()) / + static_cast<i64>(PerConnectionPeriodicCheckPeriod.GetValue()), + static_cast<i64>(1)); + for (i64 index = 0; index < connectionsToCheck && !connectionList.empty(); ++index) { + auto& weakConnection = connectionList[CurrentConnectionListIndex_]; + if (auto connection = weakConnection.Lock()) { + connection->RunPeriodicCheck(); + ++CurrentConnectionListIndex_; + } else { + std::swap(weakConnection, connectionList.back()); + connectionList.pop_back(); + } + if (CurrentConnectionListIndex_ >= std::ssize(connectionList)) { + CurrentConnectionListIndex_ = 0; + } } - } + }); } std::optional<TString> TTcpDispatcher::TImpl::GetBusCertsDirectoryPath() const diff --git a/yt/yt/core/bus/tcp/dispatcher_impl.h b/yt/yt/core/bus/tcp/dispatcher_impl.h index 054607bc3ee..82cbf184a79 100644 --- a/yt/yt/core/bus/tcp/dispatcher_impl.h +++ b/yt/yt/core/bus/tcp/dispatcher_impl.h @@ -13,6 +13,7 @@ #include <yt/yt/core/misc/error.h> #include <yt/yt/core/misc/mpsc_stack.h> +#include <library/cpp/yt/threading/atomic_object.h> #include <library/cpp/yt/threading/rw_spin_lock.h> #include <library/cpp/yt/threading/fork_aware_rw_spin_lock.h> @@ -86,7 +87,7 @@ private: NConcurrency::IThreadPoolPollerPtr XferPoller_; TMpscStack<TWeakPtr<TTcpConnection>> ConnectionsToRegister_; - std::vector<TWeakPtr<TTcpConnection>> ConnectionList_; + NThreading::TAtomicObject<std::vector<TWeakPtr<TTcpConnection>>> ConnectionList_; int CurrentConnectionListIndex_ = 0; struct TNetworkStatistics diff --git a/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto b/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto index bfdd234fb23..350c5dc87b4 100644 --- a/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto +++ b/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto @@ -3305,6 +3305,7 @@ message TRspGetQueryResult optional TTableSchema schema = 4; required NYT.NChunkClient.NProto.TDataStatistics data_statistics = 5; required bool is_truncated = 6; + optional bytes full_result = 7; // YSON } //////////////////////////////////////////////////////////////////////////////// |