This is an automated email from the ASF dual-hosted git repository. curth pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push: new 5238995e7 fix(csharp/src/Drivers/Apache/Spark): fix column metadata index offset for Spark standard (#3392) 5238995e7 is described below commit 5238995e7521106ee0a7d41333ef07d3f9b7b7a6 Author: Bruce Irschick <bruce.irsch...@improving.com> AuthorDate: Wed Sep 3 16:59:47 2025 -0700 fix(csharp/src/Drivers/Apache/Spark): fix column metadata index offset for Spark standard (#3392) fix column metadata index offset for Spark standard. Previous calls to GetObjects would throw an "index out of range" exception. --- csharp/src/Drivers/Apache/Spark/SparkConnection.cs | 2 + .../Drivers/Apache/Spark/SparkHttpConnection.cs | 2 - .../Apache/Spark/SparkStandardConnection.cs | 2 - .../Drivers/Apache/Spark/SparkConnectionTest.cs | 51 +++++++++++++++------- csharp/test/Drivers/Apache/Spark/StatementTests.cs | 1 + 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs index bf6269c3a..3b0fb634b 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkConnection.cs @@ -65,6 +65,8 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark protected internal override int PositionRequiredOffset => 1; + protected override int ColumnMapIndexOffset => 1; + internal override void SetPrecisionScaleAndTypeName( short colType, string typeName, diff --git a/csharp/src/Drivers/Apache/Spark/SparkHttpConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkHttpConnection.cs index b3710314d..de5492175 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkHttpConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkHttpConnection.cs @@ -245,8 +245,6 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark internal override SparkServerType ServerType => SparkServerType.Http; - protected override int ColumnMapIndexOffset => 1; - public override string AssemblyVersion => s_assemblyVersion; public override string AssemblyName => s_assemblyName; diff --git a/csharp/src/Drivers/Apache/Spark/SparkStandardConnection.cs b/csharp/src/Drivers/Apache/Spark/SparkStandardConnection.cs index f7438fe47..46faab96e 100644 --- a/csharp/src/Drivers/Apache/Spark/SparkStandardConnection.cs +++ b/csharp/src/Drivers/Apache/Spark/SparkStandardConnection.cs @@ -218,7 +218,5 @@ namespace Apache.Arrow.Adbc.Drivers.Apache.Spark public override string AssemblyName => s_assemblyName; public override string AssemblyVersion => s_assemblyVersion; - - protected override int ColumnMapIndexOffset => 0; } } diff --git a/csharp/test/Drivers/Apache/Spark/SparkConnectionTest.cs b/csharp/test/Drivers/Apache/Spark/SparkConnectionTest.cs index 2ca2c1ab6..d1dfa123e 100644 --- a/csharp/test/Drivers/Apache/Spark/SparkConnectionTest.cs +++ b/csharp/test/Drivers/Apache/Spark/SparkConnectionTest.cs @@ -290,24 +290,45 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark { public InvalidConnectionParametersTestData() { + string serverType = SparkServerTypeConstants.Standard; Add(new([], typeof(ArgumentException))); Add(new(new() { [SparkParameters.Type] = " " }, typeof(ArgumentOutOfRangeException))); Add(new(new() { [SparkParameters.Type] = "xxx" }, typeof(ArgumentOutOfRangeException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Standard }, typeof(ArgumentOutOfRangeException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = " " }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "invalid!server.com" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "http://valid.server.com" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"unknown_auth_type" }, typeof(ArgumentOutOfRangeException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Basic}" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Token}" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Basic}", [SparkParameters.Token] = "abcdef" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Token}", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Password] = "myPassword" }, typeof(ArgumentException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = ((long)int.MaxValue + 1).ToString() }, typeof(ArgumentOutOfRangeException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = "non-numeric" }, typeof(ArgumentOutOfRangeException))); - Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Http, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = "" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Standard }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = " " }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "invalid!server.com" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "http://valid.server.com" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"unknown_auth_type" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Basic}" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Token}" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Basic}", [SparkParameters.Token] = "abcdef" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Token}", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Password] = "myPassword" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = ((long)int.MaxValue + 1).ToString() }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = "non-numeric" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = "" }, typeof(ArgumentException))); + + serverType = SparkServerTypeConstants.Http; + Add(new([], typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = " " }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = "xxx" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = SparkServerTypeConstants.Standard }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = " " }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "invalid!server.com" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "http://valid.server.com" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"unknown_auth_type" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Basic}" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Token}" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Basic}", [SparkParameters.Token] = "abcdef" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [SparkParameters.AuthType] = $"{SparkAuthTypeConstants.Token}", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Password] = "myPassword" }, typeof(ArgumentException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = ((long)int.MaxValue + 1).ToString() }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = "non-numeric" }, typeof(ArgumentOutOfRangeException))); + Add(new(new() { [SparkParameters.Type] = serverType, [SparkParameters.HostName] = "valid.server.com", [AdbcOptions.Username] = "user", [AdbcOptions.Password] = "myPassword", [SparkParameters.ConnectTimeoutMilliseconds] = "" }, typeof(ArgumentOutOfRangeException))); } } } diff --git a/csharp/test/Drivers/Apache/Spark/StatementTests.cs b/csharp/test/Drivers/Apache/Spark/StatementTests.cs index 05613933e..d8eb7d478 100644 --- a/csharp/test/Drivers/Apache/Spark/StatementTests.cs +++ b/csharp/test/Drivers/Apache/Spark/StatementTests.cs @@ -42,6 +42,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Apache.Spark [InlineData(LongRunningStatementTimeoutTestData.LongRunningQuery)] internal override async Task CanCancelStatementTest(string query) { + Skip.If(TestConfiguration.Type == "standard", "Spark 'standard' transport does not support cancellation test."); await base.CanCancelStatementTest(query); }