59
59
import io .airbyte .config .ActorCatalogFetchEvent ;
60
60
import io .airbyte .config .ActorDefinitionVersion ;
61
61
import io .airbyte .config .ConfiguredAirbyteCatalog ;
62
+ import io .airbyte .config .Field ;
62
63
import io .airbyte .config .JobStatusSummary ;
63
64
import io .airbyte .config .RefreshStream .RefreshType ;
64
65
import io .airbyte .config .StandardSourceDefinition ;
65
66
import io .airbyte .config .StandardSync ;
67
+ import io .airbyte .config .helpers .FieldGenerator ;
66
68
import io .airbyte .config .persistence .ActorDefinitionVersionHelper ;
67
69
import io .airbyte .config .persistence .ConfigNotFoundException ;
68
70
import io .airbyte .config .persistence .ConfigRepository ;
@@ -110,6 +112,7 @@ public class WebBackendConnectionsHandler {
110
112
private final ConnectionService connectionService ;
111
113
private final ActorDefinitionVersionHelper actorDefinitionVersionHelper ;
112
114
private final FeatureFlagClient featureFlagClient ;
115
+ private final FieldGenerator fieldGenerator ;
113
116
114
117
public WebBackendConnectionsHandler (final ActorDefinitionVersionHandler actorDefinitionVersionHandler ,
115
118
final ConnectionsHandler connectionsHandler ,
@@ -123,6 +126,7 @@ public WebBackendConnectionsHandler(final ActorDefinitionVersionHandler actorDef
123
126
final ConfigRepository configRepositoryDoNotUse ,
124
127
final ConnectionService connectionService ,
125
128
final ActorDefinitionVersionHelper actorDefinitionVersionHelper ,
129
+ final FieldGenerator fieldGenerator ,
126
130
final FeatureFlagClient featureFlagClient ) {
127
131
this .actorDefinitionVersionHandler = actorDefinitionVersionHandler ;
128
132
this .connectionsHandler = connectionsHandler ;
@@ -136,6 +140,7 @@ public WebBackendConnectionsHandler(final ActorDefinitionVersionHandler actorDef
136
140
this .configRepositoryDoNotUse = configRepositoryDoNotUse ;
137
141
this .connectionService = connectionService ;
138
142
this .actorDefinitionVersionHelper = actorDefinitionVersionHelper ;
143
+ this .fieldGenerator = fieldGenerator ;
139
144
this .featureFlagClient = featureFlagClient ;
140
145
}
141
146
@@ -479,9 +484,9 @@ private Optional<SourceDiscoverSchemaRead> getRefreshedSchema(final UUID sourceI
479
484
* catalog
480
485
*/
481
486
@ VisibleForTesting
482
- protected static AirbyteCatalog updateSchemaWithRefreshedDiscoveredCatalog (final AirbyteCatalog originalConfigured ,
483
- final AirbyteCatalog originalDiscovered ,
484
- final AirbyteCatalog discovered ) {
487
+ protected AirbyteCatalog updateSchemaWithRefreshedDiscoveredCatalog (final AirbyteCatalog originalConfigured ,
488
+ final AirbyteCatalog originalDiscovered ,
489
+ final AirbyteCatalog discovered ) {
485
490
/*
486
491
* We can't directly use s.getStream() as the key, because it contains a bunch of other fields, so
487
492
* we just define a quick-and-dirty record class.
@@ -536,6 +541,17 @@ protected static AirbyteCatalog updateSchemaWithRefreshedDiscoveredCatalog(final
536
541
outputStreamConfig .setSuggested (originalConfiguredStream .getConfig ().getSuggested ());
537
542
outputStreamConfig .setFieldSelectionEnabled (originalStreamConfig .getFieldSelectionEnabled ());
538
543
544
+ // Add hashed field configs that are still present in the schema
545
+ if (originalStreamConfig .getHashedFields () != null && !originalStreamConfig .getHashedFields ().isEmpty ()) {
546
+ final List <String > discoveredFields =
547
+ fieldGenerator .getFieldsFromSchema (stream .getJsonSchema ()).stream ().map (Field ::getName ).toList ();
548
+ for (final SelectedFieldInfo hashedField : originalStreamConfig .getHashedFields ()) {
549
+ if (discoveredFields .contains (hashedField .getFieldPath ().getFirst ())) {
550
+ outputStreamConfig .addHashedFieldsItem (hashedField );
551
+ }
552
+ }
553
+ }
554
+
539
555
if (outputStreamConfig .getFieldSelectionEnabled ()) {
540
556
// TODO(mfsiega-airbyte): support nested fields.
541
557
// If field selection is enabled, populate the selected fields.
0 commit comments