ES|QL|DS: A declaration for external-datasource behaviour, demonstrated on dataset registration #159749

Open
quackaplop opened 5:24pm on September 18, 2026 wants to merge 3040 Δ into elastic/elasticsearch main from
ds-crud-combinatorics

Pull request #159749 quality checks

Code files and functions touched by this pull request are analyzed below.

Quality targets

How does this pull request compare to chosen code quality targets? Read more about code quality targets.

Target name Target value This PR
Maximum Diff Delta per PR 750 3040
Maximum comment count per PR 20 1
Pull request maximum business days between activity 3 1
Pull request maximum business days open 10 1

Coupled files

Are there any files from this commit that are always committed alongside another file? This often suggests that there exists code coupling to potentially remove. Read more about code coupling

Committed together % Code file
Coupled code file
Commits in PR with both
100 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/SplitPartitioner.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/CsvFixtureParser.java
2
100 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAuditTests.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureMatrixTests.java
3
100 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAuditTests.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensionsTests.java
3
100 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAuditTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAudit.java
2
100 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRendererTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRenderer.java
2
100 x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/DatasetRegistrationContractIT.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContractTests.java
6
100 x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/DatasetRegistrationContractIT.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContract.java
6
100 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContractTests.java
x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/DatasetRegistrationContractIT.java
6
100 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContractTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContract.java
6
100 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContract.java
x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/DatasetRegistrationContractIT.java
6
100 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContract.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContractTests.java
6
84 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureCapabilities.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensionsTests.java
1
81 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAudit.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensions.java
1
80 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRenderer.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRendererTests.java
2
80 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureMatrixTests.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensionsTests.java
3
78 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureExclusionsTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureExclusions.java
1
78 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureExclusions.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureExclusionsTests.java
1
76 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensionsTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensions.java
3
76 x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensions.java
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensionsTests.java
3
75 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/CsvFixtureParserTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureMatrix.java
2
75 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/CsvFixtureParserTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/CsvFixtureParser.java
2
75 x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRendererTests.java
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureMatrix.java
2

Biggest files changes in pull request

Path View whole file Lines removed Lines added Final line count
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensions.java 0 169 1831
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContract.java 0 365 365
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureDimensionsTests.java 0 425 1468
x-pack/plugin/esql/qa/server/single-node/src/javaRestTest/java/org/elasticsearch/xpack/esql/qa/single_node/DatasetRegistrationContractIT.java 0 286 ---
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/RegistrationContractTests.java 0 258 ---
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureMatrixTests.java 0 338 338
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureExclusionsTests.java 0 335 335
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAuditTests.java 0 198 198
x-pack/plugin/esql/qa/fixture-common/README.md 0 274 274
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureMatrix.java 0 622 622
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureContractAudit.java 0 256 256
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/DimensionDiscriminationTests.java 0 159 159
x-pack/plugin/esql/qa/fixture-common/fixture-vector-tasks.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureExclusions.java 0 398 398
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/CaseShard.java 0 105 105
x-pack/plugin/esql/qa/fixture-common/src/main/resources/org/elasticsearch/xpack/esql/datasources/fixtures/fixture-dimensions.properties 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/HivePartitioner.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/fixture-layouts.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/resources/org/elasticsearch/xpack/esql/datasources/fixtures/registration-contract.properties 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/CsvFixtureParserTests.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/fixture-manifest.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/CaseShardTests.java 0 106 106
x-pack/plugin/esql/qa/fixture-common/src/test/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRendererTests.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/CsvFixtureParser.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/fixture-coverage.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/fixture-matrix.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/TextRowRenderer.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/FixtureCapabilities.java 0 162 162
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/SplitPartitioner.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/java/org/elasticsearch/xpack/esql/datasources/fixtures/DeclaredSchemas.java 0 0 ---
x-pack/plugin/esql/qa/fixture-common/fixture-variants.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/build.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/dimension-contract.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/resources/org/elasticsearch/xpack/esql/datasources/fixtures/fixture-exclusions.properties 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/resources/org/elasticsearch/xpack/esql/datasources/fixtures/dataset-registration-cases.properties 0 0 ---
x-pack/plugin/esql/qa/server/single-node/build.gradle 0 0 ---
x-pack/plugin/esql/qa/fixture-common/src/main/resources/org/elasticsearch/xpack/esql/datasources/fixtures/fixture-matrix.properties 0 0 ---

️ Biggest functions grown or shrunk by pull request

Which functions had their line count change as part of this pull request?

Qualified function name View whole function Lines removed Lines added Final line count
FixtureDimensions::parse 0 51 498
RegistrationContract::parse 0 78 130
FixtureDimensions 0 2 40
FixtureDimensions 0 2 38
FixtureDimensions::seamServes 0 8 28
RegistrationContractTests::testEveryMessageNamesSomethingTheCasePinned 0 23 27
FixtureDimensionsTests::testClusterSettingsCarryOnlyClusterBoundSlotsOffTheirDefault 0 24 23
RegistrationContract::Case 0 3 23
FixtureDimensionsTests::testAMalformedValueDisjointEntryIsRejected 0 23 22
FixtureExclusionsTests::testAnExclusionMustCarryATypedReason 0 22 21
RegistrationContract::Case 0 13 21
FixtureMatrix::paddedForTemplate 0 1 21
RegistrationContractTests::testTheDeclaredContractIsComplete 0 9 18
FixtureMatrixTests::testUnrepresentableDialectsStackAndMustBeExplained 0 18 17
RegistrationContract::nameOf 0 6 17
RegistrationContract::declaredColumns 0 17 16
FixtureMatrixTests::testARestrictedDatasetNeedsAReasonAndRealFormats 0 16 15
FixtureExclusionsTests::testAnExclusionKeyMustNameBothSpecAndCase 0 15 14
FixtureDimensionsTests::testAVectorNameCarriesTheOffDefaultSlotsAndRoundTrips 0 15 14
FixtureDimensionsTests::testADisjointPairBlamedOnADefectMustCiteIt 0 15 14
RegistrationContract::parse::Case 0 14 13
FixtureMatrixTests::testAnUndeclaredDatasetRefusesToGuessItsPaddingOrDialect 0 14 13
RegistrationContract::Case 0 1 13
FixtureExclusionsTests::testASharedReasonIsResolvedForEveryEntryThatReferencesIt 0 13 12
FixtureMatrixTests::testAWholeFileExclusionMustDeclareItsReason 0 13 12
FixtureDimensionsTests::testARejectionMustNameARealValueAndFormat 0 12 11
FixtureDimensionsTests::testAStrayTopLevelKeyIsRejectedUnlessItIsAReason 0 12 11
FixtureDimensionsTests::testAnAbsenceMustNameARealValueAndFormat 0 12 11
FixtureDimensionsTests::testDerivedValuesMustNameSomethingDeclared 0 12 11
FixtureDimensionsTests::testADimensionWithoutADefaultIsRejected 0 12 11
DatasetRegistrationContractIT::initFixtureDir 0 3 11
FixtureMatrixTests::testABlankCodecListIsRefusedLikeAnAbsentOne 0 11 10
FixtureDimensionsTests::testADataSourceDimensionTravelsUnderItsOwnKeyAndNotTheDirectiveOne 0 10 10
RegistrationContractTests::testEveryBlockedCaseInTheContractCitesAnIssue 0 10 9
FixtureDimensionsTests::testARejectedValueIsServedOnlyByTheRegistrationSeam 0 10 9
RegistrationContractTests::testTheResourceFormIsDeclaredAndValidated 0 9 8
RegistrationContractTests::testABlockedCaseMustCiteTheIssueThatWillUnblockIt 0 9 8
RegistrationContractTests::testACaseMayRegisterMoreThanOneSetting 0 9 8
FixtureDimensionsTests::testACellCannotBeBothAbsentAndRejected 0 8 7
FixtureDimensionsTests::testATierMustNameADeclaredFormat 0 8 7
FixtureMatrixTests::testALayoutWithNoSourceDatasetFallsBackRatherThanThrowing 0 8 7
FixtureMatrixTests::testADerivedLayoutResolvesToTheDatasetItIsBuiltFrom 0 8 7
FixtureMatrixTests::testAMissingCodecListIsRefusedRatherThanReadAsEmpty 0 8 7
RegistrationContractTests::testEveryRequiredFieldIsRequired 0 2 7
RegistrationContractTests::testEveryMessageNamesASettingTheCaseRegisters 0 1 7
RegistrationContractTests::testAWellFormedCaseParses 0 1 7
RegistrationContractTests::testACaseWithNoSettingsIsRejected 0 7 6
FixtureMatrixTests::minimalDeclaration 0 7 6
FixtureMatrixTests::testAnUnrecognisedKeyIsRejected 0 7 6
RegistrationContractTests::wellFormed 0 3 6
RegistrationContractTests::testACaseMayAssertASubstringIsAbsent 0 6 5
RegistrationContractTests::testAnUnknownOutcomeIsRejected 0 6 5
RegistrationContractTests::testARefusedCaseMayNotDeclareAQuery 0 6 5
RegistrationContractTests::testTheContractCarriesAtLeastOneCombination 0 6 5
FixtureExclusionsTests::testAnUnresolvedSharedReasonIsRejected 0 6 5
FixtureExclusionsTests::testAnExclusionForAnUndeclaredSuiteIsRejected 0 6 5
FixtureExclusionsTests::testAnUnknownKeyIsRejectedRatherThanSkipped 0 6 5
FixtureDimensionsTests::testAPerFormatRejectionWinsOverABareOne 0 6 5
FixtureDimensionsTests::testAnUnverifiedPairIsTreatedAsInteracting 0 6 5
FixtureDimensionsTests::testTheDelimiterSpellingResolvesToOneCharacter 0 6 5
FixtureDimensionsTests::testAMultiCharacterSpellingForACharValuedSlotIsRejected 0 6 5
FixtureMatrixTests::testAStandaloneTemplateResolvesToItselfAndItsDialect 0 6 5
FixtureMatrixTests::testPaddingIsDeclaredPerDatasetAndOnlyAppliesToCsv 0 6 5
FixtureMatrixTests::testSnapshotOnlyTextCodecsAreWithheldFromAReleaseBuild 0 6 5
FixtureContractAuditTests::testTheAuditRefusesAnythingButOneArgument 0 6 5
FixtureDimensionsTests::testAKeyOnABindThatCarriesNoneIsRejected 0 2 5
RegistrationContractTests::testABlankFieldIsRefusedLikeAnAbsentOne 0 1 5
RegistrationContractTests::testAnUnknownAttributeIsRejected 0 1 5
FixtureExclusionsTests::declared 0 5 4
FixtureDimensions::rejectionMessage 0 5 4
FixtureDimensionsTests::testRefusingTheDefaultIsRejected 0 5 4
FixtureDimensionsTests::testARejectionWithoutAMessageIsRefused 0 5 4
FixtureDimensionsTests::testARejectedValueCarriesTheMessageItMustBeRefusedWith 0 5 4
FixtureDimensionsTests::testABackendMappingMustNameADeclaredValue 0 5 4
FixtureDimensionsTests::testAPerValueAttributeWithoutItsValueIsRejected 0 5 4
FixtureDimensionsTests::testAnAttributeQualifierIsRejectedWhereNoneIsTaken 0 5 4
FixtureDimensionsTests::testACodecExtensionComesFromTheDeclaration 0 5 4
FixtureDimensionsTests::testAPerFormatDefaultOutsideItsValuesIsRejected 0 5 4
FixtureDimensionsTests::testAValueMappingForAnUnknownDimensionIsRejected 0 5 4
FixtureDimensionsTests::testAMalformedDimensionKeyIsRejected 0 5 4
FixtureDimensionsTests::testTheDataSourceCellIsServedOnlyByTheDataSourceSeam 0 5 4
FixtureDimensionsTests::testDataSourceSettingsOmitSlotsAtTheirDefault 0 5 4
FixtureMatrixTests::testABlankSpecExclusionListExcludesNothing 0 5 4
FixtureMatrixTests::testAParquetSuiteOverrideNarrowsTheCodecSet 0 5 4
FixtureContractAuditTests::noExclusions 0 5 4
RegistrationContractTests::testAnExplicitFormatOverridesTheDefault 0 1 4
DatasetRegistrationContractIT::resourceFor 0 4 3
FixtureExclusionsTests::testAMissingSuitesListIsRejected 0 4 3
FixtureDimensionsTests::testAskingForAVerdictOnAnUnknownPairIsRejected 0 4 3
FixtureDimensionsTests::testAskingForAnUnknownDimensionIsRejected 0 4 3
FixtureDimensionsTests::testTierNamesAreMatchedCaseInsensitively 0 4 3
FixtureDimensionsTests::testTheTabEscapeDecodesToARealTab 0 4 3
FixtureDimensionsTests::testAnUnknownTierIsRejected 0 4 3
RegistrationContractTests::testEveryOutcomeHasACase 0 3 3
RegistrationContractTests::testTheContractCarriesBothOutcomes 0 1 3
RegistrationContract::Case::blocked 0 3 2
FixtureMatrix::parse 0 3 2
FixtureDimensions::keyFor 0 3 2
FixtureMatrixTests::testADatasetWithNoDeclaredUnrepresentableDialectsHasNone 0 3 2
FixtureMatrixTests::testASuiteWithNoDeclaredExclusionsExcludesNothing 0 3 2
FixtureDimensions::dataSourceKey 0 2 2
FixtureDimensions::directiveKey 0 1 2