@@ -55,6 +55,7 @@ internal class DatabricksConnection : SparkHttpConnection
5555 private bool _useCloudFetch = true ;
5656 private bool _canDecompressLz4 = true ;
5757 private long _maxBytesPerFile = DefaultMaxBytesPerFile ;
58+ private bool _useArrowNativeTypes = true ;
5859 private const bool DefaultRetryOnUnavailable = true ;
5960 private const int DefaultTemporarilyUnavailableRetryTimeout = 900 ;
6061 private bool _useDescTableExtended = true ;
@@ -264,6 +265,11 @@ private void ValidateProperties()
264265 /// </summary>
265266 internal bool CanDecompressLz4 => _canDecompressLz4 ;
266267
268+ /// <summary>
269+ /// Gets whether Arrow native types are used.
270+ /// </summary>
271+ internal bool UseArrowNativeTypes => _useArrowNativeTypes ;
272+
267273 /// <summary>
268274 /// Gets the maximum bytes per file for CloudFetch.
269275 /// </summary>
@@ -392,10 +398,17 @@ internal override IArrowArrayStream NewReader<T>(T statement, Schema schema, TGe
392398 isLz4Compressed = metadataResp . Lz4Compressed ;
393399 }
394400
401+ // If we have a schema from the metadata response, reparse it with the statement's useArrowNativeTypes flag
402+ if ( metadataResp ? . Schema != null && schema != null )
403+ {
404+ var schemaParser = new DatabricksSchemaParser ( databricksStatement . UseArrowNativeTypes ) ;
405+ schema = schemaParser . GetArrowSchema ( metadataResp . Schema , DataTypeConversion ) ;
406+ }
407+
395408 return new DatabricksCompositeReader ( databricksStatement , schema , isLz4Compressed , TlsOptions , _proxyConfigurator ) ;
396409 }
397410
398- internal override SchemaParser SchemaParser => new DatabricksSchemaParser ( ) ;
411+ internal override SchemaParser SchemaParser => new DatabricksSchemaParser ( _useArrowNativeTypes ) ;
399412
400413 public override AdbcStatement CreateStatement ( )
401414 {
@@ -442,6 +455,7 @@ protected override async Task HandleOpenSessionResponse(TOpenSessionResp? sessio
442455 }
443456 _enablePKFK = _enablePKFK && FeatureVersionNegotiator . SupportsPKFK ( version ) ;
444457 _enableMultipleCatalogSupport = session . __isset . canUseMultipleCatalogs ? session . CanUseMultipleCatalogs : false ;
458+ _useArrowNativeTypes = FeatureVersionNegotiator . SupportsArrowNativeTypes ( version ) ;
445459 if ( session . __isset . initialNamespace )
446460 {
447461 _defaultNamespace = session . InitialNamespace ;
0 commit comments