This is an automated email from the ASF dual-hosted git repository. RyanSkraba pushed a commit to branch pr/2250 in repository https://gitbox.apache.org/repos/asf/avro.git
commit 2cee342d2038655ce90e248e88cd04d795bc0958 Merge: 8fa32e7f37 28285c9e81 Author: Ryan Skraba <[email protected]> AuthorDate: Tue Aug 4 18:47:16 2026 +0200 Merge branch 'main' into pr/2250 .asf.yaml | 20 +- .devcontainer/devcontainer.json | 69 +- .editorconfig | 17 + .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/dependabot.yml | 7 - .github/labeler.yml | 58 +- .github/workflows/codeql-csharp-analysis.yml | 17 +- .github/workflows/codeql-java-analysis.yml | 31 +- .github/workflows/codeql-js-analysis.yml | 12 +- .github/workflows/codeql-py-analysis.yml | 12 +- .github/workflows/deploy-docs.yml | 322 ++ .github/workflows/java-publish-snapshot.yml | 33 +- .github/workflows/labeler.yml | 6 +- .github/workflows/maven4.yml | 28 +- .github/workflows/rat.yml | 27 +- .github/workflows/spotless.yml | 25 +- .../workflows/test-docker.yml | 35 +- .github/workflows/test-lang-c++.yml | 21 +- .github/workflows/test-lang-c.yml | 71 +- .github/workflows/test-lang-csharp.yml | 53 +- .github/workflows/test-lang-java.yml | 160 +- .github/workflows/test-lang-js.yml | 54 +- .github/workflows/test-lang-perl.yml | 97 +- .github/workflows/test-lang-php.yml | 72 +- .github/workflows/test-lang-py.yml | 95 +- .github/workflows/test-lang-ruby.yml | 65 +- .github/workflows/test-lang-rust-audit.yml | 56 - .github/workflows/test-lang-rust-ci.yml | 238 - .github/workflows/test-lang-rust-clippy.yml | 50 - .gitmodules | 3 - .mvn/extensions.xml | 2 +- BUILD.md | 27 +- DIST_README.txt | 2 +- LICENSE.txt | 180 - NOTICE.txt | 49 +- README.md | 34 +- build.sh | 62 +- composer.json | 63 +- doc/.gitignore | 1 - doc/README.md | 57 +- doc/assets/icons/logo.png | Bin 4777 -> 0 bytes doc/assets/images/logo-black-text.png | Bin 0 -> 2429 bytes doc/assets/images/logo-text.svg | 38 + doc/assets/images/logo-white-text.png | Bin 0 -> 2416 bytes doc/assets/images/logo.png | Bin 0 -> 1451 bytes doc/assets/images/logo.svg | 27 + doc/assets/scss/PTMono-Regular.ttf | Bin 0 -> 169480 bytes doc/assets/scss/_styles_project.scss | 39 + doc/config.toml | 50 +- doc/content/en/_index.html | 2 +- doc/content/en/_index.md | 40 + doc/content/en/avro.rdf | 67 + .../news/new-committer-christophe-le-saec.md} | 22 +- .../new-committer-oscar-westra-van-holthe-kind.md | 41 + .../news/new-pmc-michael-a-smith.md} | 15 +- doc/content/en/blog/news/new-project-logo.md | 50 + .../en/blog/releases/avro-1.11.2-released.md | 98 + .../en/blog/releases/avro-1.11.3-released.md | 79 + .../en/blog/releases/avro-1.11.4-released.md | 49 + .../en/blog/releases/avro-1.11.5-released.md | 48 + .../en/blog/releases/avro-1.12.0-released.md | 538 +++ .../en/blog/releases/avro-1.12.1-released.md | 90 + .../en/docs/++version++/Editor Support/_index.md | 175 + .../Editor Support/eclipseAvroclipse.png | Bin 0 -> 6419 bytes .../jetbrainsAvroAndParquetViewer.svg | 6 + .../jetbrainsAvroIdlSchemaSupport.svg | 21 + .../Editor Support/jetbrainsBigDataFileViewer.svg | 13 + .../Editor Support/visualStudioAvroIdl.png | Bin 0 -> 29293 bytes .../Editor Support/visualStudioAvroTools.png | Bin 0 -> 7092 bytes .../Editor Support/visualStudioAvroViewer.png | Bin 0 -> 113909 bytes .../++version++/Getting started (Java)/_index.md | 30 +- .../++version++/Getting started (Python)/_index.md | 6 +- .../en/docs/++version++/IDL Language/_index.md | 235 +- .../en/docs/++version++/MapReduce guide/_index.md | 2 + .../en/docs/++version++/SASL profile/_index.md | 2 + .../en/docs/++version++/Specification/_index.md | 125 +- doc/content/en/docs/++version++/_index.md | 4 +- .../_index.md => docs/++version++/api-py.md} | 10 +- .../_index.md => docs/++version++/api-rust.md} | 10 +- .../Getting started (Java)/_index.md | 10 +- .../Getting started (Python)/_index.md | 17 +- .../{++version++ => 1.11.1}/IDL Language/_index.md | 20 +- .../MapReduce guide/_index.md | 10 +- .../{++version++ => 1.11.1}/SASL profile/_index.md | 4 +- .../Specification/_index.md | 33 +- .../en/docs/{++version++ => 1.11.1}/_index.md | 6 +- .../Security/_index.md => docs/1.11.1/api-c++.md} | 10 +- .../Security/_index.md => docs/1.11.1/api-c.md} | 10 +- .../_index.md => docs/1.11.1/api-csharp.md} | 10 +- .../Security/_index.md => docs/1.11.1/api-java.md} | 10 +- .../icons => content/en/docs/1.11.1}/logo.svg | 0 .../Getting started (Java)/_index.md | 10 +- .../Getting started (Python)/_index.md | 6 +- .../{++version++ => 1.11.2}/IDL Language/_index.md | 12 +- .../MapReduce guide/_index.md | 10 +- .../{++version++ => 1.11.2}/SASL profile/_index.md | 4 +- .../Specification/_index.md | 0 .../en/docs/{++version++ => 1.11.2}/_index.md | 6 +- .../Security/_index.md => docs/1.11.2/api-c++.md} | 10 +- .../Security/_index.md => docs/1.11.2/api-c.md} | 10 +- .../_index.md => docs/1.11.2/api-csharp.md} | 10 +- .../Security/_index.md => docs/1.11.2/api-java.md} | 10 +- .../en/docs/{++version++ => 1.11.2}/logo.svg | 0 .../Getting started (Java)/_index.md | 10 +- .../Getting started (Python)/_index.md | 6 +- .../{++version++ => 1.11.3}/IDL Language/_index.md | 12 +- .../MapReduce guide/_index.md | 10 +- .../{++version++ => 1.11.3}/SASL profile/_index.md | 4 +- .../Specification/_index.md | 9 +- .../en/docs/{++version++ => 1.11.3}/_index.md | 6 +- .../Security/_index.md => docs/1.11.3/api-c++.md} | 10 +- .../Security/_index.md => docs/1.11.3/api-c.md} | 10 +- .../_index.md => docs/1.11.3/api-csharp.md} | 10 +- .../Security/_index.md => docs/1.11.3/api-java.md} | 10 +- .../Security/_index.md => docs/1.11.3/api-py.md} | 10 +- .../icons => content/en/docs/1.11.3}/logo.svg | 0 .../Getting started (Java)/_index.md | 10 +- .../Getting started (Python)/_index.md | 6 +- .../{++version++ => 1.11.4}/IDL Language/_index.md | 12 +- .../MapReduce guide/_index.md | 10 +- .../{++version++ => 1.11.4}/SASL profile/_index.md | 4 +- .../Specification/_index.md | 9 +- .../en/docs/{++version++ => 1.11.4}/_index.md | 6 +- .../Security/_index.md => docs/1.11.4/api-c++.md} | 10 +- .../Security/_index.md => docs/1.11.4/api-c.md} | 10 +- .../_index.md => docs/1.11.4/api-csharp.md} | 10 +- .../Security/_index.md => docs/1.11.4/api-java.md} | 10 +- .../Security/_index.md => docs/1.11.4/api-py.md} | 10 +- .../icons => content/en/docs/1.11.4}/logo.svg | 0 .../Getting started (Java)/_index.md | 26 +- .../Getting started (Python)/_index.md | 10 +- .../{++version++ => 1.12.0}/IDL Language/_index.md | 178 +- .../MapReduce guide/_index.md | 10 +- .../{++version++ => 1.12.0}/SASL profile/_index.md | 0 .../Specification/_index.md | 99 +- .../en/docs/{++version++ => 1.12.0}/_index.md | 6 +- .../Security/_index.md => docs/1.12.0/api-c++.md} | 10 +- .../Security/_index.md => docs/1.12.0/api-c.md} | 10 +- .../_index.md => docs/1.12.0/api-csharp.md} | 10 +- .../Security/_index.md => docs/1.12.0/api-java.md} | 10 +- .../Security/_index.md => docs/1.12.0/api-py.md} | 10 +- .../en/docs/1.12.0/trevni/css/maven-base.css | 168 + .../en/docs/1.12.0/trevni/css/maven-theme.css | 161 + doc/content/en/docs/1.12.0/trevni/css/print.css | 26 + doc/content/en/docs/1.12.0/trevni/css/site.css | 1 + .../en/docs/1.12.0/trevni/dependencies.html | 503 +++ .../docs/1.12.0/trevni/dependency-convergence.html | 339 ++ .../en/docs/1.12.0/trevni/dependency-info.html | 118 + .../docs/1.12.0/trevni/dependency-management.html | 613 +++ .../1.12.0/trevni/distribution-management.html | 94 + doc/content/en/docs/1.12.0/trevni/images/close.gif | Bin 0 -> 279 bytes .../en/docs/1.12.0/trevni/images/collapsed.gif | Bin 0 -> 53 bytes .../en/docs/1.12.0/trevni/images/expanded.gif | Bin 0 -> 52 bytes .../en/docs/1.12.0/trevni/images/external.png | Bin 0 -> 230 bytes .../docs/1.12.0/trevni/images/icon_error_sml.gif | Bin 0 -> 1010 bytes .../en/docs/1.12.0/trevni/images/icon_info_sml.gif | Bin 0 -> 606 bytes .../docs/1.12.0/trevni/images/icon_success_sml.gif | Bin 0 -> 990 bytes .../docs/1.12.0/trevni/images/icon_warning_sml.gif | Bin 0 -> 576 bytes .../trevni/images/logos/build-by-maven-black.png | Bin 0 -> 2294 bytes .../trevni/images/logos/build-by-maven-white.png | Bin 0 -> 2260 bytes .../1.12.0/trevni/images/logos/maven-feather.png | Bin 0 -> 3330 bytes .../en/docs/1.12.0/trevni/images/newwindow.png | Bin 0 -> 220 bytes doc/content/en/docs/1.12.0/trevni/index.html | 107 + .../en/docs/1.12.0/trevni/issue-management.html | 96 + .../content/en/docs/1.12.0/trevni/licenses.html | 199 +- .../en/docs/1.12.0/trevni/mailing-lists.html | 117 + doc/content/en/docs/1.12.0/trevni/modules.html | 105 + .../en/docs/1.12.0/trevni/plugin-management.html | 244 ++ doc/content/en/docs/1.12.0/trevni/plugins.html | 158 + .../en/docs/1.12.0/trevni/project-info.html | 139 + doc/content/en/docs/1.12.0/trevni/scm.html | 106 + doc/content/en/docs/1.12.0/trevni/summary.html | 133 + doc/content/en/docs/_index.md | 4 +- .../Contributors onboarding guide/_index.md | 4 +- doc/content/en/project/Credits/_index.md | 48 +- doc/content/en/project/How to contribute/_index.md | 4 +- doc/content/en/project/Privacy policy/_index.md | 4 +- doc/content/en/project/Security/_index.md | 43 +- doc/examples/example.py | 28 +- doc/examples/java-example/pom.xml | 23 +- doc/examples/mr-example/pom.xml | 6 +- lang/rust/wasm-demo/src/lib.rs => doc/go.mod | 10 + doc/go.sum | 6 + doc/layouts/partials/navbar-asf-links.html | 16 +- doc/layouts/partials/navbar-docs-selector.html | 16 +- doc/layouts/partials/navbar.html | 7 +- doc/layouts/project/list.html | 6 +- doc/layouts/shortcodes/project_logo.html | 22 + doc/package-lock.json | 922 ++++ doc/package.json | 6 +- doc/themes/docsy | 1 - lang/c++/CMakeLists.txt | 326 +- lang/c++/LICENSE | 30 - lang/c++/MainPage.dox | 7 +- lang/c++/README | 8 +- lang/c++/api/LogicalType.hh | 65 - lang/c++/build.sh | 26 +- lang/c++/cmake/avro-cpp-config.cmake.in | 67 + .../c++/cmake/avro-cpp.pc.in | 23 +- lang/c++/examples/cpx.hh | 17 +- lang/c++/examples/custom.cc | 14 +- lang/c++/examples/datafile.cc | 17 +- lang/c++/examples/generated.cc | 10 +- lang/c++/examples/generic.cc | 16 +- lang/c++/examples/imaginary.hh | 18 +- lang/c++/examples/resolving.cc | 16 +- lang/c++/examples/schemaload.cc | 7 +- lang/c++/examples/validating.cc | 20 +- lang/c++/impl/BinaryDecoder.cc | 12 +- lang/c++/impl/Compiler.cc | 216 +- lang/c++/impl/CustomAttributes.cc | 41 +- lang/c++/impl/DataFile.cc | 460 +- lang/c++/impl/FileStream.cc | 30 +- lang/c++/impl/Generic.cc | 6 +- lang/c++/impl/GenericDatum.cc | 2 +- lang/c++/impl/LogicalType.cc | 58 +- lang/c++/impl/Node.cc | 114 +- lang/c++/impl/NodeImpl.cc | 157 +- lang/c++/impl/Resolver.cc | 42 +- lang/c++/impl/Schema.cc | 2 +- lang/c++/impl/Stream.cc | 8 +- lang/c++/impl/ValidSchema.cc | 7 +- lang/c++/impl/Validator.cc | 17 +- lang/c++/impl/Zigzag.cc | 8 +- lang/c++/impl/ZstdCompressWrapper.cc | 62 + .../Exception.hh => impl/ZstdCompressWrapper.hh} | 30 +- lang/c++/impl/ZstdDecompressWrapper.cc | 78 + .../Exception.hh => impl/ZstdDecompressWrapper.hh} | 30 +- lang/c++/impl/avrogencpp.cc | 423 +- lang/c++/impl/json/JsonDom.cc | 27 +- lang/c++/impl/json/JsonDom.hh | 31 +- lang/c++/impl/json/JsonIO.cc | 106 +- lang/c++/impl/json/JsonIO.hh | 52 +- lang/c++/impl/parsing/JsonCodec.cc | 12 +- lang/c++/impl/parsing/ResolvingDecoder.cc | 109 +- lang/c++/impl/parsing/Symbol.cc | 6 +- lang/c++/impl/parsing/Symbol.hh | 68 +- lang/c++/impl/parsing/ValidatingCodec.cc | 4 +- lang/c++/{api => include/avro}/AvroParse.hh | 0 lang/c++/{api => include/avro}/AvroSerialize.hh | 0 lang/c++/{api => include/avro}/AvroTraits.hh | 0 lang/c++/{api => include/avro}/Compiler.hh | 9 +- lang/c++/{api => include/avro}/Config.hh | 40 +- lang/c++/{api => include/avro}/CustomAttributes.hh | 21 +- lang/c++/{api => include/avro}/DataFile.hh | 89 +- lang/c++/{api => include/avro}/Decoder.hh | 0 lang/c++/{api => include/avro}/Encoder.hh | 0 lang/c++/{api => include/avro}/Exception.hh | 8 +- lang/c++/{api => include/avro}/Generic.hh | 12 +- lang/c++/{api => include/avro}/GenericDatum.hh | 61 +- lang/c++/{api => include/avro}/Layout.hh | 8 +- lang/c++/include/avro/LogicalType.hh | 120 + lang/c++/{api => include/avro}/Node.hh | 47 +- lang/c++/{api => include/avro}/NodeConcepts.hh | 4 +- lang/c++/{api => include/avro}/NodeImpl.hh | 95 +- lang/c++/{api => include/avro}/Parser.hh | 5 +- lang/c++/{api => include/avro}/Reader.hh | 16 +- lang/c++/{api => include/avro}/Resolver.hh | 7 +- lang/c++/{api => include/avro}/ResolverSchema.hh | 1 - lang/c++/{api => include/avro}/ResolvingReader.hh | 5 +- lang/c++/{api => include/avro}/Schema.hh | 2 +- lang/c++/{api => include/avro}/SchemaResolution.hh | 0 lang/c++/{api => include/avro}/Serializer.hh | 6 +- lang/c++/{api => include/avro}/Specific.hh | 5 +- lang/c++/{api => include/avro}/Stream.hh | 13 +- lang/c++/{api => include/avro}/Types.hh | 9 + lang/c++/{api => include/avro}/ValidSchema.hh | 0 lang/c++/{api => include/avro}/Validator.hh | 41 +- lang/c++/{api => include/avro}/Writer.hh | 6 +- lang/c++/{api => include/avro}/Zigzag.hh | 6 +- lang/c++/{api => include/avro}/buffer/Buffer.hh | 11 +- .../{api => include/avro}/buffer/BufferPrint.hh | 2 +- .../{api => include/avro}/buffer/BufferReader.hh | 8 +- .../{api => include/avro}/buffer/BufferStream.hh | 4 +- .../avro}/buffer/BufferStreambuf.hh | 10 +- .../avro}/buffer/detail/BufferDetail.hh | 37 +- .../avro}/buffer/detail/BufferDetailIterator.hh | 18 - lang/c++/jsonschemas/big_union | 101 + lang/c++/jsonschemas/bigrecord | 3 +- .../jsonschemas/cpp_reserved_words_union_typedef | 13 + lang/c++/jsonschemas/union_empty_record | 25 + lang/c++/jsonschemas/union_redundant_types | 22 + lang/c++/m4/README | 3 - lang/c++/m4/m4_ax_boost_asio.m4 | 108 - lang/c++/m4/m4_ax_boost_base.m4 | 219 - lang/c++/m4/m4_ax_boost_filesystem.m4 | 115 - lang/c++/m4/m4_ax_boost_regex.m4 | 105 - lang/c++/m4/m4_ax_boost_system.m4 | 117 - lang/c++/m4/m4_ax_boost_thread.m4 | 146 - lang/c++/parser/AvroLex.ll | 203 - lang/c++/parser/AvroYacc.yy | 200 - lang/c++/test/AvrogencppTestReservedWords.cc | 1 + lang/c++/test/AvrogencppTests.cc | 258 +- lang/c++/test/CodecTests.cc | 778 +++- lang/c++/test/CommonsSchemasTests.cc | 94 + lang/c++/test/CompilerTests.cc | 63 + lang/c++/test/DataFileTests.cc | 604 ++- lang/c++/test/JsonTests.cc | 17 +- lang/c++/test/SchemaTests.cc | 729 +++- lang/c++/test/StreamTests.cc | 13 +- lang/c++/test/buffertest.cc | 122 +- lang/c++/test/unittest.cc | 75 +- lang/c/CMakeLists.txt | 10 +- lang/c/build.sh | 5 + lang/c/docs/index.txt | 4 +- lang/c/examples/quickstop.c | 2 +- lang/c/src/avro/basics.h | 4 +- lang/c/src/avro/refcount.h | 5 +- lang/c/src/codec.c | 3 + lang/c/src/consume-binary.c | 3 + lang/c/src/datafile.c | 12 + lang/c/src/datum.c | 13 +- lang/c/src/datum_equal.c | 10 +- lang/c/src/datum_size.c | 3 +- lang/c/src/datum_skip.c | 3 + lang/c/src/datum_validate.c | 4 +- lang/c/src/datum_value.c | 14 +- lang/c/src/encoding.h | 2 + lang/c/src/encoding_binary.c | 16 +- lang/c/src/generic.c | 2 +- lang/c/src/memoize.c | 6 +- lang/c/src/schema.c | 23 +- lang/c/src/st.c | 34 +- lang/c/src/st.h | 22 +- lang/c/src/value-json.c | 11 +- lang/c/tests/CMakeLists.txt | 2 + lang/c/tests/test_avro_4246.c | 223 + lang/c/tests/test_avro_data.c | 8 +- lang/c/tests/test_avro_type_collision.c | 64 + lang/c/version.sh | 4 +- lang/csharp/README.md | 32 +- lang/csharp/build.sh | 7 +- lang/csharp/common.props | 8 +- lang/csharp/src/apache/benchmark/Program.cs | 4 +- lang/csharp/src/apache/ipc/Avro.ipc.csproj | 2 +- lang/csharp/src/apache/ipc/HttpListenerServer.cs | 2 +- lang/csharp/src/apache/ipc/Responder.cs | 16 +- .../src/apache/ipc/Specific/SpecificRequestor.cs | 6 +- lang/csharp/src/apache/main/AvroDecimal.cs | 17 +- lang/csharp/src/apache/main/CodeGen/CodeGen.cs | 51 +- lang/csharp/src/apache/main/File/DeflateCodec.cs | 32 +- .../src/apache/main/Generic/GenericReader.cs | 29 +- .../apache/main/Generic/PreresolvingDatumReader.cs | 40 +- .../apache/main/IO/BinaryDecoder.netstandard2.0.cs | 4 +- .../main/IO/BinaryDecoder.notnetstandard2.0.cs | 4 +- lang/csharp/src/apache/main/IO/BinaryEncoder.cs | 18 +- lang/csharp/src/apache/main/IO/JsonDecoder.cs | 72 +- lang/csharp/src/apache/main/Protocol/Message.cs | 1 + lang/csharp/src/apache/main/Schema/Field.cs | 10 + .../csharp/src/apache/main/Schema/LogicalSchema.cs | 18 +- lang/csharp/src/apache/main/Schema/Schema.cs | 17 +- lang/csharp/src/apache/main/Schema/SchemaName.cs | 89 + .../src/apache/main/Specific/SpecificReader.cs | 24 +- .../src/apache/main/Specific/SpecificWriter.cs | 2 +- .../src/apache/main/Util/LogicalTypeFactory.cs | 20 +- .../src/apache/main/Util/UnknownLogicalType.cs | 145 + lang/csharp/src/apache/test/AvroDecimalTest.cs | 74 +- .../src/apache/test/AvroGen/AvroGenHelper.cs | 13 +- .../src/apache/test/AvroGen/AvroGenSchemaTests.cs | 10 +- lang/csharp/src/apache/test/CodGen/CodeGenTest.cs | 55 + lang/csharp/src/apache/test/File/FileTests.cs | 35 +- lang/csharp/src/apache/test/IO/JsonCodecTests.cs | 113 +- lang/csharp/src/apache/test/NuGetPackageTests.cs | 156 + .../src/apache/test/Protocol/ProtocolTest.cs | 17 + lang/csharp/src/apache/test/Schema/SchemaTests.cs | 113 +- .../apache/test/Util/UnknownLogicalTypeTests.cs | 188 + lang/csharp/versions.props | 37 +- lang/java/android/pom.xml | 2 +- .../java/archetypes/avro-service-archetype/pom.xml | 2 +- .../avro-service-archetype/src/main/pom/pom.xml | 7 + .../projects/basic/archetype.properties | 0 .../projects/basic/goal.txt | 0 lang/java/archetypes/pom.xml | 2 +- lang/java/avro/pom.xml | 229 +- lang/java/avro/src/it/pom.xml | 179 + lang/java/avro/src/it/settings.xml | 51 + .../avro/CanonicalSchemaFormatterFactory.java} | 17 +- .../src/main/java/org/apache/avro/Conversion.java | 43 +- .../src/main/java/org/apache/avro/Conversions.java | 152 +- .../org/apache/avro/FormattedSchemaParser.java | 77 + .../main/java/org/apache/avro/JsonProperties.java | 15 +- .../java/org/apache/avro/JsonSchemaFormatter.java} | 15 +- .../apache/avro/JsonSchemaFormatterFactory.java} | 20 +- .../java/org/apache/avro/JsonSchemaParser.java | 88 + .../main/java/org/apache/avro/LogicalTypes.java | 130 +- .../main/java/org/apache/avro/NameValidator.java | 104 + .../main/java/org/apache/avro/ParseContext.java | 351 ++ .../src/main/java/org/apache/avro/Protocol.java | 185 +- .../src/main/java/org/apache/avro/Resolver.java | 2 +- .../avro/src/main/java/org/apache/avro/Schema.java | 743 ++-- .../main/java/org/apache/avro/SchemaBuilder.java | 4 +- .../java/org/apache/avro/SchemaCompatibility.java | 4 +- .../main/java/org/apache/avro/SchemaFormatter.java | 131 + .../org/apache/avro/SchemaFormatterFactory.java | 106 + .../main/java/org/apache/avro/SchemaParser.java | 345 ++ .../java/org/apache/avro/SystemLimitException.java | 392 ++ .../org/apache/avro/UnresolvedUnionException.java | 9 +- .../src/main/java/org/apache/avro/data/Json.java | 10 +- .../java/org/apache/avro/data/TimeConversions.java | 78 + .../main/java/org/apache/avro/file/BZip2Codec.java | 6 +- .../java/org/apache/avro/file/CodecFactory.java | 4 +- .../org/apache/avro/file/DataFileConstants.java | 1 - .../java/org/apache/avro/file/DataFileReader.java | 34 +- .../org/apache/avro/file/DataFileReader12.java | 10 +- .../java/org/apache/avro/file/DataFileStream.java | 72 +- .../java/org/apache/avro/file/DataFileWriter.java | 112 +- .../java/org/apache/avro/file/DeflateCodec.java | 10 +- .../main/java/org/apache/avro/file/FileReader.java | 4 +- .../apache/avro/file/SeekableByteArrayInput.java | 9 +- .../java/org/apache/avro/file/SnappyCodec.java | 10 +- .../main/java/org/apache/avro/file/XZCodec.java | 10 +- .../java/org/apache/avro/file/ZstandardCodec.java | 6 +- .../java/org/apache/avro/generic/GenericData.java | 247 +- .../apache/avro/generic/GenericDatumReader.java | 207 +- .../apache/avro/generic/GenericDatumWriter.java | 6 +- .../org/apache/avro/generic/PrimitivesArrays.java | 665 +++ .../main/java/org/apache/avro/io/BinaryData.java | 34 +- .../java/org/apache/avro/io/BinaryDecoder.java | 219 +- .../java/org/apache/avro/io/BinaryEncoder.java | 46 +- .../org/apache/avro/io/BlockingBinaryEncoder.java | 9 +- .../avro/io/BlockingDirectBinaryEncoder.java | 141 + .../org/apache/avro/io/BufferedBinaryEncoder.java | 13 +- .../main/java/org/apache/avro/io/DatumWriter.java | 16 + .../src/main/java/org/apache/avro/io/Decoder.java | 76 +- .../java/org/apache/avro/io/DecoderFactory.java | 16 +- .../org/apache/avro/io/DirectBinaryDecoder.java | 23 +- .../org/apache/avro/io/DirectBinaryEncoder.java | 12 +- .../src/main/java/org/apache/avro/io/Encoder.java | 58 +- .../java/org/apache/avro/io/EncoderFactory.java | 92 +- .../java/org/apache/avro/io/FastReaderBuilder.java | 91 +- .../main/java/org/apache/avro/io/JsonDecoder.java | 81 +- .../main/java/org/apache/avro/io/JsonEncoder.java | 69 +- .../java/org/apache/avro/io/ResolvingDecoder.java | 17 +- .../java/org/apache/avro/io/ValidatingDecoder.java | 7 +- .../java/org/apache/avro/io/ValidatingEncoder.java | 8 +- .../java/org/apache/avro/io/parsing/Parser.java | 2 +- .../avro/io/parsing/ResolvingGrammarGenerator.java | 41 +- .../java/org/apache/avro/io/parsing/Symbol.java | 25 +- .../io/parsing/ValidatingGrammarGenerator.java | 2 +- .../apache/avro/message/BinaryMessageDecoder.java | 2 +- .../org/apache/avro/message/RawMessageDecoder.java | 4 +- .../org/apache/avro/message/RawMessageEncoder.java | 3 +- .../apache/avro/path/TracingAvroTypeException.java | 4 +- .../java/org/apache/avro/reflect/AvroEncode.java | 4 +- .../apache/avro/reflect/FieldAccessReflect.java | 10 +- .../org/apache/avro/reflect/FieldAccessUnsafe.java | 366 -- .../java/org/apache/avro/reflect/ReflectData.java | 103 +- .../apache/avro/reflect/ReflectDatumReader.java | 14 + .../apache/avro/reflect/ReflectDatumWriter.java | 12 +- .../org/apache/avro/reflect/ReflectionUtil.java | 38 +- .../apache/avro/specific/ExternalizableInput.java | 5 - .../org/apache/avro/specific/SpecificData.java | 167 +- .../apache/avro/specific/SpecificDatumReader.java | 43 +- .../apache/avro/util/ByteBufferInputStream.java | 16 +- .../apache/avro/util/ClassSecurityValidator.java | 254 ++ .../main/java/org/apache/avro/util/ClassUtils.java | 12 +- .../main/java/org/apache/avro/util/MapUtil.java | 7 +- .../avro/util/NonCopyingByteArrayOutputStream.java | 90 +- .../main/java/org/apache/avro/util/RandomData.java | 69 +- .../java/org/apache/avro/util/SchemaResolver.java | 275 ++ .../java/org/apache/avro/util/SchemaVisitor.java | 69 + .../main/java/org/apache/avro/util}/Schemas.java | 135 +- .../main/java/org/apache/avro/util/TimePeriod.java | 393 ++ .../src/main/java/org/apache/avro/util/Utf8.java | 124 +- .../java/org/apache/avro/util/UtfTextUtils.java | 247 ++ .../org/apache/avro/util/WeakIdentityHashMap.java | 4 +- .../apache/avro/util/internal/JacksonUtils.java | 44 +- .../org.apache.avro.SchemaFormatterFactory} | 6 +- ...ummyLogicalTypeFactory.java => CustomType.java} | 28 +- ...alTypeFactory.java => CustomTypeConverter.java} | 28 +- ...tory.java => CustomTypeLogicalTypeFactory.java} | 6 +- .../java/org/apache/avro/DummySchemaParser.java | 53 + .../java/org/apache/avro/FooBarSpecificRecord.java | 2 +- .../java/org/apache/avro/GenerateBlockingData.java | 2 +- .../java/org/apache/avro/ParseContextTest.java | 129 + .../java/org/apache/avro/SchemaFormatterTest.java | 88 + .../org/apache/avro/SchemaNameValidatorTest.java | 59 + .../org/apache/avro/TestBigDecimalConversion.java | 85 + .../src/test/java/org/apache/avro/TestCompare.java | 37 +- .../test/java/org/apache/avro/TestDataFile.java | 123 +- .../java/org/apache/avro/TestDataFileConcat.java | 75 +- .../org/apache/avro/TestDataFileCorruption.java | 5 +- .../java/org/apache/avro/TestDataFileReader.java | 110 +- .../src/test/java/org/apache/avro/TestFixed.java | 17 +- .../test/java/org/apache/avro/TestLogicalType.java | 45 +- .../test/java/org/apache/avro/TestProtocol.java | 88 + .../TestReadingWritingDataInEvolvedSchemas.java | 344 +- .../src/test/java/org/apache/avro/TestSchema.java | 305 +- .../java/org/apache/avro/TestSchemaBuilder.java | 25 +- .../java/org/apache/avro/TestSchemaCommons.java | 17 +- .../org/apache/avro/TestSchemaCompatibility.java | 28 +- .../avro/TestSchemaCompatibilityEnumDefaults.java | 13 +- .../TestSchemaCompatibilityFixedSizeMismatch.java | 52 +- .../TestSchemaCompatibilityMissingEnumSymbols.java | 45 +- .../TestSchemaCompatibilityMissingUnionBranch.java | 129 +- .../avro/TestSchemaCompatibilityNameMismatch.java | 51 +- ...ompatibilityReaderFieldMissingDefaultValue.java | 43 +- .../avro/TestSchemaCompatibilityTypeMismatch.java | 124 +- .../org/apache/avro/TestSchemaNormalization.java | 6 +- .../java/org/apache/avro/TestSchemaParser.java | 141 + .../org/apache/avro/TestSchemaValidateDefault.java | 152 + .../java/org/apache/avro/TestSchemaValidation.java | 2 +- .../java/org/apache/avro/TestSchemaWarnings.java | 14 +- .../org/apache/avro/TestSystemLimitException.java | 208 + .../test/java/org/apache/avro/TestUnionError.java | 87 + .../org/apache/avro/TestUnionSelfReference.java | 25 +- .../java/org/apache/avro/TestUuidConversions.java | 72 + .../src/test/java/org/apache/avro/TypeEnum.java | 2 +- .../org/apache/avro/data/TestTimeConversions.java | 19 + .../java/org/apache/avro/file/TestAllCodecs.java | 58 +- .../avro/file/TestIOExceptionDuringWrite.java | 3 +- .../avro/file/TestSeekableByteArrayInput.java | 47 +- .../apache/avro/file/TestSeekableInputStream.java | 57 + .../GenericDataArrayTest.java} | 34 +- .../org/apache/avro/generic/GenericDataTest.java | 262 ++ .../apache/avro/generic/PrimitivesArraysTest.java | 307 ++ .../org/apache/avro/generic/TestGenericData.java | 121 +- .../avro/generic/TestGenericDatumReader.java | 569 +++ .../avro/generic/TestGenericDatumWriter.java | 20 +- .../avro/generic/TestGenericLogicalTypes.java | 144 +- .../avro/io/FastReaderBuilderJavaClassTest.java | 116 + .../java/org/apache/avro/io/TestBinaryData.java | 56 +- .../java/org/apache/avro/io/TestBinaryDecoder.java | 640 ++- .../apache/avro/io/TestBinaryEncoderFidelity.java | 42 + .../avro/io/TestBlockingDirectBinaryEncoder.java | 147 + .../java/org/apache/avro/io/TestBlockingIO.java | 65 +- .../java/org/apache/avro/io/TestBlockingIO2.java | 38 +- .../test/java/org/apache/avro/io/TestEncoders.java | 110 +- .../avro/io/TestFastReaderBuilderClassLoading.java | 120 + .../java/org/apache/avro/io/TestJsonDecoder.java | 43 +- .../java/org/apache/avro/io/TestResolvingIO.java | 60 +- .../apache/avro/io/TestResolvingIOResolving.java | 62 +- .../java/org/apache/avro/io/TestValidatingIO.java | 115 +- .../org/apache/avro/io/parsing/SymbolTest.java | 3 +- .../io/parsing/TestResolvingGrammarGenerator.java | 68 +- .../io/parsing/TestResolvingGrammarGenerator2.java | 3 +- .../TestGenerateInteropSingleObjectEncoding.java | 5 +- .../message/TestInteropSingleObjectEncoding.java | 5 +- .../org/apache/avro/reflect/TestAvroEncode.java | 181 + .../java/org/apache/avro/reflect/TestReflect.java | 175 +- .../org/apache/avro/reflect/TestReflectData.java | 15 +- .../avro/reflect/TestReflectDatumReader.java | 18 + .../avro/reflect/TestReflectLogicalTypes.java | 111 +- .../apache/avro/reflect/TestReflectionUtil.java | 79 - .../avro/specific/TestRecordWithLogicalTypes.java | 53 +- .../avro/specific/TestRecordWithMapsAndArrays.java | 875 ++++ .../specific/TestRecordWithoutLogicalTypes.java | 4 +- .../org/apache/avro/specific/TestSpecificData.java | 19 + .../avro/specific/TestSpecificRecordWithUnion.java | 36 +- .../avro/specific/TestSpecificToFromByteArray.java | 5 +- .../org/apache/avro/specific/TestUnionRecord.java | 2 +- .../test/java/org/apache/avro/specific/int$.java | 229 + .../util/NonCopyingByteArrayOutputStreamTest.java | 93 + .../avro/util/TestClassSecurityValidator.java | 138 + .../java/org/apache/avro/util/TestRandomData.java | 225 + .../org/apache/avro/util/TestSchemaResolver.java | 82 + .../java/org/apache/avro/util/TestSchemas.java | 210 + .../test/java/org/apache/avro/util/TestUtf8.java | 79 +- .../java/org/apache/avro/util/TimePeriodTest.java | 306 ++ .../org/apache/avro/util/UtfTextUtilsTest.java | 132 + .../apache/avro/util/WeakIdentityHashMapTest.java | 89 + .../avro/util/internal/TestJacksonUtils.java | 5 + .../META-INF/services/org.apache.avro.Conversion} | 17 +- .../services/org.apache.avro.FormattedSchemaParser | 18 +- ...org.apache.avro.LogicalTypes$LogicalTypeFactory | 2 +- .../test/resources/TestRecordWithLogicalTypes.avsc | 8 +- .../resources/TestRecordWithMapsAndArrays.avsc | 47 + .../resources/multipleFile/ApplicationEvent.avsc | 44 + .../test/resources/multipleFile/DocumentInfo.avsc | 19 + .../test/resources/multipleFile/MyResponse.avsc | 14 + .../avro/src/test/resources/multipleFile/README.md | 8 + lang/java/build.sh | 7 +- lang/java/compiler/pom.xml | 70 +- .../apache/avro/compiler/idl/SchemaResolver.java | 25 +- .../org/apache/avro/compiler/schema/Schemas.java | 6 +- .../apache/avro/compiler/specific/SchemaTask.java | 15 +- .../avro/compiler/specific/SpecificCompiler.java | 399 +- .../javacc/org/apache/avro/compiler/idl/idl.jj | 10 +- .../specific/templates/java/classic/enum.vm | 4 +- .../specific/templates/java/classic/fixed.vm | 4 +- .../specific/templates/java/classic/protocol.vm | 8 +- .../specific/templates/java/classic/record.vm | 106 +- lang/java/compiler/src/test/idl/input/bar.avpr | 3 +- lang/java/compiler/src/test/idl/input/union.avdl | 16 + lang/java/compiler/src/test/idl/output/import.avpr | 10 +- .../compiler/src/test/idl/output/nestedimport.avpr | 11 +- lang/java/compiler/src/test/idl/output/union.avpr | 38 + .../apache/avro/compiler/schema/TestSchemas.java | 62 +- .../compiler/specific/TestSpecificCompiler.java | 291 +- .../apache/avro/specific/TestGeneratedCode.java | 31 +- .../org/apache/avro/specific/TestSpecificData.java | 29 +- .../src/test/resources/full_record_v2.avsc | 3 +- .../regression_error_field_in_record.avsc | 22 + .../compiler/src/test/resources/simple_record.avsc | 5 +- lang/java/grpc/pom.xml | 5 +- lang/java/grpc/src/test/avro/TestService.avdl | 2 +- lang/java/idl/pom.xml | 178 + .../src/main/java/org/apache/avro/idl/IdlFile.java | 166 + .../main/java/org/apache/avro/idl/IdlReader.java | 1073 +++++ .../org/apache/avro/idl/IdlSchemaFormatter.java} | 37 +- .../avro/idl/IdlSchemaFormatterFactory.java} | 14 +- .../java/org/apache/avro/idl/IdlSchemaParser.java | 53 + .../main/java/org/apache/avro/idl/IdlUtils.java | 545 +++ .../idl/src/main/resources/META-INF}/LICENSE | 0 .../org.apache.avro.FormattedSchemaParser} | 5 +- .../org.apache.avro.SchemaFormatterFactory} | 5 +- .../src/test/idl/AnnotationOnTypeReference.avdl} | 20 +- .../src/test/idl/cycle.avdl} | 30 +- .../test/idl/extra/duplicateNameErrorParsing.avdl | 14 + .../idl/src/test/idl/extra/protocolSyntax.avdl | 9 + lang/java/idl/src/test/idl/extra/schemaSyntax.avdl | 8 + .../{compiler => idl}/src/test/idl/input/bar.avpr | 0 .../idl/src/test/idl/input/baseball.avdl} | 14 +- lang/java/idl/src/test/idl/input/baz.avsc | 3 + lang/java/idl/src/test/idl/input/comments.avdl | 64 + .../src/test/idl/input/cycle.avdl} | 30 +- .../java/idl/src/test/idl/input}/echo.avdl | 20 +- lang/java/idl/src/test/idl/input/foo.avsc | 3 + .../src/test/idl/input/forward_ref.avdl} | 21 +- .../java/idl/src/test/idl/input/import.avdl | 35 +- .../java/idl/src/test/idl/input/interop.avdl | 53 +- .../src/test/idl/input/leading_underscore.avdl} | 15 +- lang/java/idl/src/test/idl/input/mr_events.avdl | 74 + .../java/idl/src/test/idl/input/namespaces.avdl | 47 +- .../java/idl/src/test/idl/input/nestedimport.avdl | 28 +- lang/java/idl/src/test/idl/input/player.avsc | 8 + lang/java/idl/src/test/idl/input/position.avsc | 3 + .../idl/src/test/idl/input/reservedwords.avdl} | 18 +- .../src/test/idl/input/schema_syntax_schema.avdl} | 41 +- lang/java/idl/src/test/idl/input/simple.avdl | 90 + .../java/idl/src/test/idl/input/status_schema.avdl | 5 + .../idl/src/test/idl/input/unicode.avdl} | 18 +- lang/java/idl/src/test/idl/input/union.avdl | 16 + .../idl/src/test/idl/input/uuid.avdl} | 33 +- .../java/idl/src/test/idl/logicalTypes.avdl | 31 +- .../src/test/idl/output/baseball.avpr} | 46 +- lang/java/idl/src/test/idl/output/comments.avpr | 67 + lang/java/idl/src/test/idl/output/cycle.avpr | 55 + lang/java/idl/src/test/idl/output/echo.avpr | 37 + lang/java/idl/src/test/idl/output/forward_ref.avpr | 16 + .../src/test/idl/output/import.avpr | 0 lang/java/idl/src/test/idl/output/interop.avpr | 94 + .../src/test/idl/output/leading_underscore.avpr | 17 + lang/java/idl/src/test/idl/output/mr_events.avpr | 125 + lang/java/idl/src/test/idl/output/namespaces.avpr | 51 + .../src/test/idl/output/nestedimport.avpr | 0 .../src/test/idl/output/reservedwords.avpr} | 42 +- .../idl/src/test/idl/output/schema_syntax.avsc | 36 + lang/java/idl/src/test/idl/output/simple.avpr | 152 + lang/java/idl/src/test/idl/output/status.avsc | 9 + lang/java/idl/src/test/idl/output/unicode.avpr | 17 + lang/java/idl/src/test/idl/output/union.avpr | 38 + lang/java/idl/src/test/idl/output/uuid.avpr | 29 + .../test/idl/putOnClassPath/OnTheClasspath.avdl} | 17 +- .../test/idl/putOnClassPath/OnTheClasspath.avpr | 11 + .../test/idl/putOnClassPath/OnTheClasspath.avsc | 6 + .../idl/putOnClassPath/folder/relativePath.avdl} | 15 +- .../src/test/idl/putOnClassPath/nestedtypes.avdl} | 16 +- .../avro/idl/IdlSchemaFormatterFactoryTest.java | 61 + .../java/org/apache/avro/idl/IdlUtilsTest.java | 193 + .../test/java/org/apache/avro/idl/TestCycle.java | 88 + .../java/org/apache/avro/idl/TestIdlReader.java | 269 ++ .../java/org/apache/avro/idl/TestLogicalTypes.java | 96 + .../idl/TestReferenceAnnotationNotAllowed.java | 42 + .../apache/avro/util/idl_utils_test_protocol.avdl | 45 + .../apache/avro/util/idl_utils_test_schema.avdl | 35 + lang/java/integration-test/codegen-test/pom.xml | 4 +- lang/java/integration-test/pom.xml | 4 +- .../test-custom-conversions/pom.xml | 4 +- lang/java/interop-data-test/pom.xml | 215 + lang/java/interop-data-test/src/it/check/pom.xml | 187 + .../java/org/apache/avro/DataFileInteropTest.java | 12 +- .../java/interop-data-test/src/it/generate/pom.xml | 244 ++ lang/java/interop-data-test/src/it/settings.xml | 51 + lang/java/ipc-jetty/pom.xml | 4 +- .../org/apache/avro/ipc/jetty/StaticServlet.java | 45 - .../org/apache/avro/ipc/jetty/StatsServer.java | 41 +- lang/java/ipc-netty/pom.xml | 8 +- .../ipc/netty/TestNettyServerWithCompression.java | 2 +- lang/java/ipc/pom.xml | 6 +- .../avro/ipc/stats/static/jquery-1.4.2.min.js | 154 - .../avro/ipc/stats/static/jquery-3.7.1.min.js | 2 + .../apache/avro/ipc/stats/templates/statsview.vm | 4 +- .../src/test/java/org/apache/avro/TestCompare.java | 126 - .../java/org/apache/avro/TestDataFileReflect.java | 97 + .../java/org/apache/avro/TestDataFileSpecific.java | 63 +- .../java/org/apache/avro/TestProtocolReflect.java | 5 + .../src/test/java/org/apache/avro/TestSchema.java | 207 +- .../compiler/specific/TestSpecificCompiler.java | 70 +- .../ipc/src/test/java/org/apache/avro/io/Perf.java | 17 +- lang/java/java17-test/pom.xml | 68 + .../org/apache/avro/reflect/TestJavaRecords.java | 108 + lang/java/mapred/pom.xml | 8 +- .../avro/hadoop/file/HadoopCodecFactory.java | 9 +- .../avro/hadoop/io/AvroDatumConverterFactory.java | 2 +- .../apache/avro/hadoop/io/AvroSequenceFile.java | 6 +- .../apache/avro/hadoop/io/AvroSerialization.java | 9 +- .../main/java/org/apache/avro/mapred/AvroJob.java | 7 +- .../org/apache/avro/mapred/AvroMultipleInputs.java | 5 +- .../org/apache/avro/mapred/TaggedInputSplit.java | 5 +- .../java/org/apache/avro/mapreduce/AvroJob.java | 9 +- .../avro/hadoop/file/TestHadoopCodecFactory.java | 7 + .../hadoop/io/TestAvroDatumConverterFactory.java | 15 + .../avro/mapred/tether/TestWordCountTether.java | 1 + .../org/apache/avro/mapred/tether/TetherTask.java | 5 +- .../avro/mapreduce/TestAvroMultipleOutputs.java | 5 +- .../mapreduce/TestAvroMultipleOutputsSyncable.java | 5 +- .../org/apache/avro/mapreduce/TestWordCount.java | 3 +- lang/java/maven-plugin/pom.xml | 15 +- .../org/apache/avro/mojo/AbstractAvroMojo.java | 173 +- .../mojo/{IDLProtocolMojo.java => IDLMojo.java} | 60 +- .../java/org/apache/avro/mojo/IDLProtocolMojo.java | 96 +- .../java/org/apache/avro/mojo/ProtocolMojo.java | 29 +- .../main/java/org/apache/avro/mojo/SchemaMojo.java | 65 +- .../src/test/avro/AvdlClasspathImport.avdl | 16 +- .../maven-plugin/src/test/avro/extends/Custom.avsc | 18 + .../avro/multipleSchemas/ApplicationEvent.avsc | 44 + .../test/avro/multipleSchemas/DocumentInfo.avsc | 19 + .../src/test/avro/multipleSchemas/MyResponse.avsc | 14 + .../src/test/avro/multipleSchemas/README.md | 8 + .../org/apache/avro/custom/CustomRecordBase.java} | 12 +- .../java/org/apache/avro/mojo/TestIDLMojo.java | 128 + .../org/apache/avro/mojo/TestIDLProtocolMojo.java | 82 - .../java/org/apache/avro/mojo/TestInduceMojo.java | 3 +- .../java/org/apache/avro/mojo/TestSchemaMojo.java | 56 +- .../{pom.xml => pom-incremental-compilation.xml} | 6 +- .../unit/idl/pom-injecting-velocity-tools.xml | 2 +- .../resources/unit/idl/{pom.xml => pom-javacc.xml} | 1 + .../src/test/resources/unit/idl/pom.xml | 3 +- .../unit/protocol/pom-injecting-velocity-tools.xml | 2 +- .../src/test/resources/unit/protocol/pom.xml | 2 +- .../pom.xml => schema/pom-customExtends.xml} | 16 +- .../pom.xml => schema/pom-multiple-schema.xml} | 10 +- .../schema/{pom.xml => pom-nonexistent-file.xml} | 5 +- .../{pom.xml => pom-nonexistent-second-file.xml} | 4 +- .../src/test/resources/unit/schema/pom.xml | 2 +- lang/java/perf/pom.xml | 25 +- .../avro/perf/test/basic/ExtendedEnumTest.java | 5 +- .../avro/perf/test/basic/UnchangedUnionTest.java | 5 +- .../perf/test/generic/GenericNestedFakeTest.java | 5 +- .../avro/perf/test/generic/GenericNestedTest.java | 5 +- .../avro/perf/test/generic/GenericStringTest.java | 5 +- .../apache/avro/perf/test/generic/GenericTest.java | 5 +- .../perf/test/generic/GenericWithDefaultTest.java | 5 +- .../test/generic/GenericWithOutOfOrderTest.java | 5 +- .../test/generic/GenericWithPromotionTest.java | 5 +- .../perf/test/generic/MinBytesPerElementTest.java | 287 ++ .../apache/avro/perf/test/record/RecordTest.java | 3 +- .../perf/test/record/RecordWithDefaultTest.java | 5 +- .../perf/test/record/RecordWithOutOfOrderTest.java | 5 +- .../perf/test/record/RecordWithPromotionTest.java | 5 +- .../avro/perf/test/record/ResolvingRecordTest.java | 5 +- .../perf/test/record/ValidatingRecordTest.java | 3 +- .../perf/test/reflect/ReflectBigRecordTest.java | 5 +- .../perf/test/reflect/ReflectDoubleArrayTest.java | 5 +- .../perf/test/reflect/ReflectFloatArrayTest.java | 5 +- .../perf/test/reflect/ReflectIntArrayTest.java | 5 +- .../reflect/ReflectLargeFloatArrayBlockedTest.java | 5 +- .../test/reflect/ReflectLargeFloatArrayTest.java | 5 +- .../perf/test/reflect/ReflectLongArrayTest.java | 5 +- .../test/reflect/ReflectNestedFloatArrayTest.java | 5 +- .../test/reflect/ReflectNestedObjectArrayTest.java | 5 +- .../avro/perf/test/reflect/ReflectRecordTest.java | 5 +- lang/java/pom.xml | 140 +- lang/java/protobuf/pom.xml | 12 +- .../org/apache/avro/protobuf/ProtoConversions.java | 44 +- .../org/apache/avro/protobuf/ProtobufData.java | 16 +- .../org/apache/avro/protobuf/TestProtobuf.java | 14 + .../org/apache/avro/protobuf/multiplefiles/A.java | 12 + .../apache/avro/protobuf/multiplefiles/Foo.java | 1539 ++++--- .../avro/protobuf/multiplefiles/FooOrBuilder.java | 89 + .../org/apache/avro/protobuf/multiplefiles/M.java | 194 +- .../avro/protobuf/multiplefiles/MOrBuilder.java | 1 + .../protobuf/multiplefiles/TestMultipleFiles.java | 28 +- .../java/org/apache/avro/protobuf/noopt/Test.java | 1857 ++++---- .../org/apache/avro/protobuf/noopt/TestProto3.java | 883 ++++ lang/java/protobuf/src/test/protobuf/test.proto | 2 + .../protobuf/src/test/protobuf/test_proto3.proto} | 22 +- lang/java/thrift/pom.xml | 30 +- .../java/org/apache/avro/thrift/ThriftData.java | 6 +- lang/java/tools/pom.xml | 18 +- .../apache/avro/tool/BinaryFragmentToJsonTool.java | 3 +- .../org/apache/avro/tool/CreateRandomFileTool.java | 3 +- .../org/apache/avro/tool/DataFileReadTool.java | 28 +- .../org/apache/avro/tool/DataFileWriteTool.java | 2 +- .../java/org/apache/avro/tool/FromTextTool.java | 4 +- .../org/apache/avro/tool/IdlToSchemataTool.java | 59 +- .../main/java/org/apache/avro/tool/IdlTool.java | 65 +- .../apache/avro/tool/JsonToBinaryFragmentTool.java | 3 +- .../apache/avro/tool/SchemaFingerprintTool.java | 7 +- .../apache/avro/tool/SchemaNormalizationTool.java | 3 +- .../org/apache/avro/tool/SpecificCompilerTool.java | 62 +- .../main/java/org/apache/avro/tool/TetherTool.java | 3 +- .../main/java/org/apache/avro/tool/ToTextTool.java | 4 +- .../apache/avro/tool/TrevniCreateRandomTool.java | 3 +- .../src/main/java/org/apache/avro/tool/Util.java | 14 +- .../jetbrainsnullsafeannotationsfieldstest.avsc | 8 + .../jspecifynullsafeannotationsfieldstest.avsc | 8 + .../input/optionalgettersnullablefieldstest.avsc | 3 +- .../src/test/compiler/output-string/Position.java | 5 +- .../avro/examples/baseball/FieldTest.java | 50 +- .../JSpecifyNullSafeAnnotationsFieldsTest.java} | 288 +- .../JetBrainsNullSafeAnnotationsFieldsTest.java} | 288 +- .../avro/examples/baseball/Player.java | 42 +- .../avro/examples/baseball/Position.java | 4 +- .../avro/examples/baseball/Proto.java | 2 +- .../output/AddExtraOptionalGettersTest.java | 34 +- .../src/test/compiler/output/NoSettersTest.java | 34 +- .../output/OptionalGettersAllFieldsTest.java | 42 +- .../output/OptionalGettersNullableFieldsTest.java | 122 +- .../tools/src/test/compiler/output/Player.java | 42 +- .../tools/src/test/compiler/output/Position.java | 4 +- .../tools/src/test/idl/schema.avdl} | 25 +- lang/java/tools/src/test/idl/schema.avsc | 36 + .../java/org/apache/avro/tool/TestCatTool.java | 5 +- .../apache/avro/tool/TestCreateRandomFileTool.java | 27 +- .../apache/avro/tool/TestDataFileRepairTool.java | 2 +- .../apache/avro/tool/TestIdlToSchemataTool.java | 29 +- .../java/org/apache/avro/tool/TestIdlTool.java | 45 +- .../org/apache/avro/tool/TestRpcProtocolTool.java | 51 +- .../apache/avro/tool/TestSpecificCompilerTool.java | 30 + .../java/org/apache/avro/tool/TestTetherTool.java | 1 + .../org/apache/avro/tool/TestToTrevniTool.java | 19 +- lang/java/trevni/avro/pom.xml | 4 +- .../org/apache/trevni/avro/AvroColumnReader.java | 3 +- .../java/org/apache/trevni/avro/TestCases.java | 5 +- .../org/apache/trevni/avro/TestEvolvedSchema.java | 7 +- .../java/org/apache/trevni/avro/TestShredder.java | 36 +- .../java/org/apache/trevni/avro/TestWordCount.java | 3 +- .../trevni/avro/mapreduce/TestKeyWordCount.java | 3 +- lang/java/trevni/core/pom.xml | 4 +- .../test/java/org/apache/trevni/TestAllCodecs.java | 29 +- .../java/org/apache/trevni/TestColumnFile.java | 129 +- lang/java/trevni/doc/pom.xml | 2 +- lang/java/trevni/pom.xml | 6 +- lang/js/.gitignore | 1 + lang/js/lib/schemas.js | 21 +- lang/js/package-lock.json | 3790 +++++++++------- lang/js/package.json | 20 +- lang/js/test/test_schemas.js | 161 + lang/perl/Changes | 28 + lang/perl/MANIFEST | 1 - lang/perl/Makefile.PL | 35 +- lang/perl/bin/avro-to-json | 4 +- lang/perl/build.sh | 7 +- lang/perl/lib/Avro/BinaryDecoder.pm | 8 +- lang/perl/lib/Avro/BinaryEncoder.pm | 83 +- lang/perl/lib/Avro/DataFileReader.pm | 4 +- lang/perl/lib/Avro/Protocol.pm | 4 +- lang/perl/lib/Avro/Schema.pm | 34 +- lang/perl/t/01_schema.t | 34 +- lang/perl/t/02_bin_encode.t | 115 +- lang/perl/t/03_bin_decode.t | 35 +- lang/perl/t/04_datafile.t | 17 + lang/perl/xt/interop.t | 7 +- lang/perl/xt/schema.t | 2 +- lang/php/.gitignore | 2 + lang/php/.php-cs-fixer.dist.php | 103 + lang/php/README.md | 8 +- lang/php/build.sh | 19 +- lang/php/examples/write_read.php | 6 +- lang/php/lib/Avro.php | 38 +- lang/php/lib/AvroDebug.php | 86 +- lang/php/lib/AvroException.php | 1 - lang/php/lib/AvroGMP.php | 117 +- lang/php/lib/AvroIO.php | 55 +- lang/php/lib/AvroNotImplementedException.php | 1 - lang/php/lib/AvroUtil.php | 11 +- lang/php/lib/DataFile/AvroDataIO.php | 110 +- lang/php/lib/DataFile/AvroDataIOException.php | 1 - lang/php/lib/DataFile/AvroDataIOReader.php | 265 +- lang/php/lib/DataFile/AvroDataIOWriter.php | 242 +- lang/php/lib/Datum/AvroIOBinaryDecoder.php | 205 +- lang/php/lib/Datum/AvroIOBinaryEncoder.php | 135 +- lang/php/lib/Datum/AvroIODatumReader.php | 548 +-- lang/php/lib/Datum/AvroIODatumWriter.php | 223 +- lang/php/lib/Datum/AvroIOSchemaMatchException.php | 14 +- lang/php/lib/Datum/AvroIOTypeException.php | 2 - lang/php/lib/Datum/Type/AvroDuration.php | 111 + lang/php/lib/IO/AvroFile.php | 86 +- lang/php/lib/IO/AvroIOException.php | 1 - lang/php/lib/IO/AvroStringIO.php | 176 +- lang/php/lib/Protocol/AvroProtocol.php | 80 +- lang/php/lib/Protocol/AvroProtocolMessage.php | 57 +- ...emaParseException.php => AvroAliasedSchema.php} | 11 +- lang/php/lib/Schema/AvroArraySchema.php | 44 +- lang/php/lib/Schema/AvroEnumSchema.php | 33 +- lang/php/lib/Schema/AvroField.php | 229 +- lang/php/lib/Schema/AvroFixedSchema.php | 91 +- lang/php/lib/Schema/AvroLogicalType.php | 136 + lang/php/lib/Schema/AvroMapSchema.php | 47 +- lang/php/lib/Schema/AvroName.php | 120 +- lang/php/lib/Schema/AvroNamedSchema.php | 69 +- lang/php/lib/Schema/AvroNamedSchemata.php | 94 +- lang/php/lib/Schema/AvroPrimitiveSchema.php | 87 +- lang/php/lib/Schema/AvroRecordSchema.php | 138 +- lang/php/lib/Schema/AvroSchema.php | 475 +- lang/php/lib/Schema/AvroSchemaParseException.php | 1 - lang/php/lib/Schema/AvroUnionSchema.php | 60 +- lang/php/lib/autoload.php | 72 +- lang/php/monorepo.json | 16 - lang/php/phpstan-baseline.neon | 148 + lang/{py/pyproject.toml => php/phpstan.neon} | 20 +- lang/php/phpunit.xml | 55 +- lang/php/test/DataFileTest.php | 265 +- lang/php/test/DatumIOTest.php | 491 ++- lang/php/test/FloatIntEncodingTest.php | 543 +-- lang/php/test/IODatumReaderTest.php | 295 +- lang/php/test/InterOpTest.php | 41 +- lang/php/test/LongEncodingTest.php | 259 +- lang/php/test/NameTest.php | 62 +- lang/php/test/ProtocolFileTest.php | 790 ++-- lang/php/test/SchemaTest.php | 1902 +++++--- lang/php/test/StringIOTest.php | 18 +- lang/php/test/generate_interop_data.php | 15 +- lang/php/test/test_helper.php | 10 +- lang/py/README.md | 2 +- lang/py/avro/__main__.py | 1 + lang/py/avro/constants.py | 1 - lang/py/avro/datafile.py | 13 +- lang/py/avro/errors.py | 4 + lang/py/avro/io.py | 20 +- lang/py/avro/ipc.py | 67 +- lang/py/avro/name.py | 1 + lang/py/avro/schema.py | 211 +- lang/py/avro/test/gen_interop_data.py | 4 +- lang/py/avro/test/sample_http_server.py | 13 +- lang/py/avro/test/test_io.py | 102 +- lang/py/avro/test/test_protocol.py | 2 +- lang/py/avro/test/test_schema.py | 306 +- lang/py/avro/test/test_script.py | 17 +- lang/py/avro/test/test_tether_task.py | 3 +- lang/py/avro/test/test_tether_task_runner.py | 8 +- lang/py/avro/test/test_tether_word_count.py | 16 +- lang/py/avro/tether/__init__.py | 10 + lang/py/avro/tether/tether_task.py | 22 +- lang/py/avro/tether/tether_task_runner.py | 8 +- lang/py/avro/tool.py | 3 +- lang/py/avro/utils.py | 2 + lang/py/build.sh | 70 +- lang/{java/build.sh => py/docs/Makefile} | 50 +- lang/py/docs/make.bat | 50 + lang/py/docs/source/_static/.gitignore | 0 lang/py/docs/source/automodule.rst | 54 + lang/py/docs/source/conf.py | 47 + .../py/docs/source/index.rst | 34 +- lang/py/docs/source/intro.rst | 29 + lang/py/pyproject.toml | 70 +- lang/py/setup.cfg | 83 - lang/py/setup.py | 2 - lang/py/tox.ini | 86 - lang/py/uv.lock | 1009 +++++ lang/ruby/lib/avro/io.rb | 28 +- lang/ruby/lib/avro/logical_types.rb | 35 +- lang/ruby/lib/avro/schema.rb | 18 +- lang/ruby/lib/avro/schema_validator.rb | 16 +- lang/ruby/test/random_data.rb | 2 + lang/ruby/test/test_io.rb | 5 +- lang/ruby/test/test_logical_types.rb | 136 +- lang/ruby/test/test_schema.rb | 33 + lang/rust/.deactivate.sh | 22 - lang/rust/.gitignore | 8 - lang/rust/.pre-commit-config.yaml | 33 - lang/rust/.requirements-precommit.txt | 1 - lang/rust/CHANGELOG.md | 166 - lang/rust/Cargo.lock | 1287 ------ lang/rust/Cargo.toml | 27 - lang/rust/Makefile | 105 - lang/rust/README.md | 42 +- lang/rust/README.tpl | 19 - lang/rust/avro/Cargo.toml | 92 - lang/rust/avro/README.md | 658 --- lang/rust/avro/benches/quickstop-null.avro | Bin 166053 -> 0 bytes lang/rust/avro/benches/serde.rs | 335 -- lang/rust/avro/benches/serde_json.rs | 79 - lang/rust/avro/benches/single.rs | 193 - lang/rust/avro/examples/benchmark.rs | 154 - lang/rust/avro/examples/generate_interop_data.rs | 111 - lang/rust/avro/examples/test_interop_data.rs | 79 - .../test_interop_single_object_encoding.rs | 75 - lang/rust/avro/examples/to_value.rs | 29 - lang/rust/avro/src/codec.rs | 279 -- lang/rust/avro/src/de.rs | 1255 ------ lang/rust/avro/src/decimal.rs | 125 - lang/rust/avro/src/decode.rs | 784 ---- lang/rust/avro/src/duration.rs | 155 - lang/rust/avro/src/encode.rs | 839 ---- lang/rust/avro/src/error.rs | 454 -- lang/rust/avro/src/lib.rs | 986 ----- lang/rust/avro/src/rabin.rs | 162 - lang/rust/avro/src/reader.rs | 963 ----- lang/rust/avro/src/schema.rs | 4537 -------------------- lang/rust/avro/src/schema_compatibility.rs | 903 ---- lang/rust/avro/src/ser.rs | 1028 ----- lang/rust/avro/src/types.rs | 2641 ------------ lang/rust/avro/src/util.rs | 287 -- lang/rust/avro/src/writer.rs | 1306 ------ lang/rust/avro/tests/append_to_existing.rs | 86 - lang/rust/avro/tests/io.rs | 319 -- lang/rust/avro/tests/schema.rs | 1386 ------ lang/rust/avro/tests/shared.rs | 147 - .../rust/avro/tests/to_from_avro_datum_schemata.rs | 84 - lang/rust/avro_derive/Cargo.toml | 45 - lang/rust/avro_derive/README.md | 69 - lang/rust/avro_derive/src/lib.rs | 524 --- lang/rust/avro_derive/tests/derive.rs | 1563 ------- lang/rust/avro_test_helper/Cargo.toml | 39 - lang/rust/avro_test_helper/README.md | 51 - lang/rust/avro_test_helper/src/lib.rs | 51 - lang/rust/avro_test_helper/src/logger.rs | 79 - lang/rust/build.sh | 69 - lang/rust/fuzz/.gitignore | 4 - lang/rust/fuzz/Cargo.toml | 49 - lang/rust/fuzz/corpus/roundtrip/infinite_iteration | Bin 132 -> 0 bytes .../fuzz/corpus/roundtrip/negate_with_overflow | Bin 17 -> 0 bytes lang/rust/fuzz/corpus/roundtrip/unchecked_resize | Bin 58 -> 0 bytes lang/rust/fuzz/fuzz_targets/roundtrip.rs | 117 - lang/rust/migration_guide.md | 107 - lang/rust/rustfmt.toml | 19 - lang/rust/wasm-demo/Cargo.toml | 48 - lang/rust/wasm-demo/README.md | 28 - lang/rust/wasm-demo/tests/demos.rs | 86 - pom.xml | 148 +- share/VERSION.txt | 2 +- share/docker/Dockerfile | 142 +- share/docker/run-tests.sh | 8 +- share/editors/README.txt | 5 + share/idl_grammar/org/apache/avro/idl/Idl.g4 | 257 ++ share/test/data/weather-deflate.avro | Bin 0 -> 319 bytes share/test/data/weather-zstd.avro | Bin 0 -> 333 bytes share/test/interop/bin/test_rpc_interop.sh | 2 +- share/test/schemas/contexts.avdl | 2 +- share/test/schemas/echo.avdl | 2 +- share/test/schemas/fooBar.avsc | 21 + share/test/schemas/http.avdl | 2 +- share/test/schemas/nestedNullable.avdl | 2 +- share/test/schemas/schemaevolution.avdl | 2 +- share/test/schemas/social.avdl | 2 +- share/test/schemas/specialtypes.avdl | 2 +- share/test/schemas/stringables.avdl | 2 +- 1040 files changed, 52608 insertions(+), 42593 deletions(-) diff --cc lang/py/avro/schema.py index 2eb231402a,018f74debe..a35ab1d471 --- a/lang/py/avro/schema.py +++ b/lang/py/avro/schema.py @@@ -587,16 -715,9 +715,18 @@@ class EnumSchema(EqualByPropsMixin, Nam return symbols raise Exception + @property + def default(self) -> Union[str, None]: + symbol = self.get_prop("default") + if isinstance(symbol, str): + return symbol + if symbol is None: + return None + raise Exception + - doc = property(lambda self: self.get_prop("doc")) + @property + def doc(self): + return self.get_prop("doc") def match(self, writer): """Return True if the current schema (as reader) matches the writer schema. diff --cc lang/py/avro/test/test_io.py index 7d634d1b28,41a0e366ba..41d7f827cf --- a/lang/py/avro/test/test_io.py +++ b/lang/py/avro/test/test_io.py @@@ -638,122 -697,23 +697,133 @@@ class TestMisc(unittest.TestCase) assert str(exc.exception) == 'The datum "5.0" provided for "foo" is not an example of the schema "long"' def test_type_exception_record(self) -> None: - writers_schema = avro.schema.parse(json.dumps({"type": "record", "name": "Test", "fields": [{"name": "foo", "type": "long"}]})) + writers_schema = avro.schema.parse( + json.dumps( + { + "type": "record", + "name": "Test", + "fields": [{"name": "foo", "type": "long"}], + } + ) + ) datum_to_write = ("foo", 5.0) - with self.assertRaisesRegex(avro.errors.AvroTypeException, r"The datum \".*\" provided for \".*\" is not an example of the schema [\s\S]*"): + with self.assertRaisesRegex( + avro.errors.AvroTypeException, + r"The datum \".*\" provided for \".*\" is not an example of the schema [\s\S]*", + ): write_datum(datum_to_write, writers_schema) + def test_can_read_future_enum_symbol_with_default(self) -> None: + default_symbol = "unknown" + future_symbol = "crc32_be" + + readers_schema = avro.schema.parse( + json.dumps( + { + "fields": [ + { + "name": "checksum_algorithm", + "type": { + "name": "ChecksumAlgorithm", + "symbols": [default_symbol, "xxhash3_64_be"], + "type": "enum", + "default": default_symbol, + }, + }, + ], + "name": "Test", + "type": "record", + } + ) + ) + # Writer adds the "crc32_be" symbol. + writers_schema = avro.schema.parse( + json.dumps( + { + "fields": [ + { + "name": "checksum_algorithm", + "type": { + "name": "ChecksumAlgorithm", + "symbols": [ + "unknown", + "xxhash3_64_be", + future_symbol, + ], + "type": "enum", + "default": default_symbol, + }, + } + ], + "name": "Test", + "type": "record", + } + ) + ) + + datum_to_write = {"checksum_algorithm": future_symbol} + + buffer, encoder, datum_writer = write_datum(datum_to_write, writers_schema) + buffer.seek(0) + decoder = avro.io.BinaryDecoder(buffer) + reader = avro.io.DatumReader(readers_schema) + datum_read = reader.read(decoder) + self.assertEqual(datum_read, {"checksum_algorithm": default_symbol}) + + def test_raises_error_for_future_enum_symbol_without_default(self) -> None: + future_symbol = "crc32_be" + + readers_schema = avro.schema.parse( + json.dumps( + { + "fields": [ + { + "name": "checksum_algorithm", + "type": { + "name": "ChecksumAlgorithm", + "symbols": ["xxhash3_64_be"], + "type": "enum", + }, + }, + ], + "name": "Test", + "type": "record", + } + ) + ) + # Writer adds the "crc32_be" symbol. + writers_schema = avro.schema.parse( + json.dumps( + { + "fields": [ + { + "name": "checksum_algorithm", + "type": { + "name": "ChecksumAlgorithm", + "symbols": [ + "xxhash3_64_be", + future_symbol, + ], + "type": "enum", + }, + } + ], + "name": "Test", + "type": "record", + } + ) + ) + + datum_to_write = {"checksum_algorithm": future_symbol} + + buffer, encoder, datum_writer = write_datum(datum_to_write, writers_schema) + buffer.seek(0) + decoder = avro.io.BinaryDecoder(buffer) + reader = avro.io.DatumReader(readers_schema) + with self.assertRaises(avro.errors.SchemaResolutionException): + reader.read(decoder) + def load_tests(loader: unittest.TestLoader, default_tests: None, pattern: None) -> unittest.TestSuite: """Generate test cases across many test schema."""
