@@ -77,6 +77,18 @@ public ProtoRelConverter(
7777 this (lookup , extensions , new ProtoExtensionConverter ());
7878 }
7979
80+ /**
81+ * Constructor with custom {@link ExtensionLookup} and {@link ProtoExtensionConverter}.
82+ *
83+ * @param lookup custom {@link ExtensionLookup} to use, must not be null
84+ * @param protoExtensionConverter custom {@link ProtoExtensionConverter} to use, must not be null
85+ */
86+ public ProtoRelConverter (
87+ @ NonNull final ExtensionLookup lookup ,
88+ @ NonNull final ProtoExtensionConverter protoExtensionConverter ) {
89+ this (lookup , DefaultExtensionCatalog .DEFAULT_COLLECTION , protoExtensionConverter );
90+ }
91+
8092 /**
8193 * Constructor with custom {@link ExtensionLookup}, {@link ExtensionCollection} and {@link
8294 * ProtoExtensionConverter}.
@@ -175,8 +187,8 @@ protected Rel newRead(ReadRel rel) {
175187 }
176188 }
177189
178- protected Rel newWrite (WriteRel rel ) {
179- WriteRel .WriteTypeCase relType = rel .getWriteTypeCase ();
190+ protected Rel newWrite (final WriteRel rel ) {
191+ final WriteRel .WriteTypeCase relType = rel .getWriteTypeCase ();
180192 switch (relType ) {
181193 case NAMED_TABLE :
182194 return newNamedWrite (rel );
@@ -187,9 +199,9 @@ protected Rel newWrite(WriteRel rel) {
187199 }
188200 }
189201
190- protected NamedWrite newNamedWrite (WriteRel rel ) {
191- Rel input = from (rel .getInput ());
192- ImmutableNamedWrite .Builder builder =
202+ protected NamedWrite newNamedWrite (final WriteRel rel ) {
203+ final Rel input = from (rel .getInput ());
204+ final ImmutableNamedWrite .Builder builder =
193205 NamedWrite .builder ()
194206 .input (input )
195207 .names (rel .getNamedTable ().getNamesList ())
@@ -202,14 +214,18 @@ protected NamedWrite newNamedWrite(WriteRel rel) {
202214 .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
203215 .remap (optionalRelmap (rel .getCommon ()))
204216 .hint (optionalHint (rel .getCommon ()));
217+
218+ if (rel .hasAdvancedExtension ()) {
219+ builder .extension (protoExtensionConverter .fromProto (rel .getAdvancedExtension ()));
220+ }
205221 return builder .build ();
206222 }
207223
208- protected Rel newExtensionWrite (WriteRel rel ) {
209- Rel input = from (rel .getInput ());
210- Extension .WriteExtensionObject detail =
224+ protected Rel newExtensionWrite (final WriteRel rel ) {
225+ final Rel input = from (rel .getInput ());
226+ final Extension .WriteExtensionObject detail =
211227 detailFromWriteExtensionObject (rel .getExtensionTable ().getDetail ());
212- ImmutableExtensionWrite .Builder builder =
228+ final ImmutableExtensionWrite .Builder builder =
213229 ExtensionWrite .builder ()
214230 .input (input )
215231 .detail (detail )
@@ -222,11 +238,15 @@ protected Rel newExtensionWrite(WriteRel rel) {
222238 .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
223239 .remap (optionalRelmap (rel .getCommon ()))
224240 .hint (optionalHint (rel .getCommon ()));
241+
242+ if (rel .hasAdvancedExtension ()) {
243+ builder .extension (protoExtensionConverter .fromProto (rel .getAdvancedExtension ()));
244+ }
225245 return builder .build ();
226246 }
227247
228- protected Rel newDdl (DdlRel rel ) {
229- DdlRel .WriteTypeCase relType = rel .getWriteTypeCase ();
248+ protected Rel newDdl (final DdlRel rel ) {
249+ final DdlRel .WriteTypeCase relType = rel .getWriteTypeCase ();
230250 switch (relType ) {
231251 case NAMED_OBJECT :
232252 return newNamedDdl (rel );
@@ -237,36 +257,48 @@ protected Rel newDdl(DdlRel rel) {
237257 }
238258 }
239259
240- protected NamedDdl newNamedDdl (DdlRel rel ) {
241- NamedStruct tableSchema = newNamedStruct (rel .getTableSchema ());
242- return NamedDdl .builder ()
243- .names (rel .getNamedObject ().getNamesList ())
244- .tableSchema (tableSchema )
245- .tableDefaults (tableDefaults (rel .getTableDefaults (), tableSchema ))
246- .operation (NamedDdl .DdlOp .fromProto (rel .getOp ()))
247- .object (NamedDdl .DdlObject .fromProto (rel .getObject ()))
248- .viewDefinition (optionalViewDefinition (rel ))
249- .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
250- .remap (optionalRelmap (rel .getCommon ()))
251- .hint (optionalHint (rel .getCommon ()))
252- .build ();
260+ protected NamedDdl newNamedDdl (final DdlRel rel ) {
261+ final NamedStruct tableSchema = newNamedStruct (rel .getTableSchema ());
262+ final ImmutableNamedDdl .Builder builder =
263+ NamedDdl .builder ()
264+ .names (rel .getNamedObject ().getNamesList ())
265+ .tableSchema (tableSchema )
266+ .tableDefaults (tableDefaults (rel .getTableDefaults (), tableSchema ))
267+ .operation (NamedDdl .DdlOp .fromProto (rel .getOp ()))
268+ .object (NamedDdl .DdlObject .fromProto (rel .getObject ()))
269+ .viewDefinition (optionalViewDefinition (rel ))
270+ .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
271+ .remap (optionalRelmap (rel .getCommon ()))
272+ .hint (optionalHint (rel .getCommon ()));
273+
274+ if (rel .hasAdvancedExtension ()) {
275+ builder .extension (protoExtensionConverter .fromProto (rel .getAdvancedExtension ()));
276+ }
277+
278+ return builder .build ();
253279 }
254280
255- protected ExtensionDdl newExtensionDdl (DdlRel rel ) {
256- Extension .DdlExtensionObject detail =
281+ protected ExtensionDdl newExtensionDdl (final DdlRel rel ) {
282+ final Extension .DdlExtensionObject detail =
257283 detailFromDdlExtensionObject (rel .getExtensionObject ().getDetail ());
258- NamedStruct tableSchema = newNamedStruct (rel .getTableSchema ());
259- return ExtensionDdl .builder ()
260- .detail (detail )
261- .tableSchema (newNamedStruct (rel .getTableSchema ()))
262- .tableDefaults (tableDefaults (rel .getTableDefaults (), tableSchema ))
263- .operation (ExtensionDdl .DdlOp .fromProto (rel .getOp ()))
264- .object (ExtensionDdl .DdlObject .fromProto (rel .getObject ()))
265- .viewDefinition (optionalViewDefinition (rel ))
266- .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
267- .remap (optionalRelmap (rel .getCommon ()))
268- .hint (optionalHint (rel .getCommon ()))
269- .build ();
284+ final NamedStruct tableSchema = newNamedStruct (rel .getTableSchema ());
285+ final ImmutableExtensionDdl .Builder builder =
286+ ExtensionDdl .builder ()
287+ .detail (detail )
288+ .tableSchema (newNamedStruct (rel .getTableSchema ()))
289+ .tableDefaults (tableDefaults (rel .getTableDefaults (), tableSchema ))
290+ .operation (ExtensionDdl .DdlOp .fromProto (rel .getOp ()))
291+ .object (ExtensionDdl .DdlObject .fromProto (rel .getObject ()))
292+ .viewDefinition (optionalViewDefinition (rel ))
293+ .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
294+ .remap (optionalRelmap (rel .getCommon ()))
295+ .hint (optionalHint (rel .getCommon ()));
296+
297+ if (rel .hasAdvancedExtension ()) {
298+ builder .extension (protoExtensionConverter .fromProto (rel .getAdvancedExtension ()));
299+ }
300+
301+ return builder .build ();
270302 }
271303
272304 protected Optional <Rel > optionalViewDefinition (DdlRel rel ) {
@@ -453,10 +485,12 @@ protected NamedScan newNamedScan(ReadRel rel) {
453485 return builder .build ();
454486 }
455487
456- protected ExtensionTable newExtensionTable (ReadRel rel ) {
457- Extension .ExtensionTableDetail detail =
488+ protected ExtensionTable newExtensionTable (final ReadRel rel ) {
489+ final NamedStruct namedStruct = newNamedStruct (rel );
490+ final Extension .ExtensionTableDetail detail =
458491 detailFromExtensionTable (rel .getExtensionTable ().getDetail ());
459- ImmutableExtensionTable .Builder builder = ExtensionTable .from (detail );
492+ final ImmutableExtensionTable .Builder builder =
493+ ExtensionTable .from (detail ).initialSchema (namedStruct );
460494
461495 builder
462496 .commonExtension (optionalAdvancedExtension (rel .getCommon ()))
0 commit comments