toddmeng-db commented on code in PR #3140:
URL: https://github.com/apache/arrow-adbc/pull/3140#discussion_r2214598029


##########
csharp/test/Drivers/Databricks/E2E/StatementTests.cs:
##########
@@ -1279,5 +1279,80 @@ public async Task 
OlderDBRVersion_ShouldSetSchemaViaUseStatement()
             Assert.True(foundSchemas.Count == 1, "Should have exactly one 
schema");
         }
 
+        [SkippableTheory]
+        [InlineData("cast(-6 as decimal(3, 1))", "-6.0", 3, 1, "Negative 
decimal with scale")]
+        [InlineData("cast(0 as decimal(1, 0))", "0", 1, 0, "Zero decimal")]
+        [InlineData("cast(123 as decimal(3, 0))", "123", 3, 0, "Positive 
integer decimal")]
+        [InlineData("cast(123456789.123456789 as decimal(18, 9))", 
"123456789.123456789", 18, 9, "High precision decimal")]
+        [InlineData("cast(-123456789.123456789 as decimal(18, 9))", 
"-123456789.123456789", 18, 9, "High precision negative decimal")]
+        public async Task CanExecuteDecimalQuery(string sqlExpression, string 
expectedValueString, int expectedPrecision, int expectedScale, string 
testDescription)
+        {
+            decimal expectedValue = decimal.Parse(expectedValueString);
+            // This tests the bug where older DBR versions return decimal 
values as strings when UseArrowNativeTypes is false
+            // To repro issue, run this with dbr < 10.0
+            OutputHelper?.WriteLine($"Testing: {testDescription}");
+            OutputHelper?.WriteLine($"SQL Expression: {sqlExpression}");
+            OutputHelper?.WriteLine($"Expected Value: {expectedValue}");
+            OutputHelper?.WriteLine($"Expected Precision: {expectedPrecision}, 
Scale: {expectedScale}");
+
+            using AdbcConnection connection = NewConnection();
+            using var statement = connection.CreateStatement();
+
+            // Use the provided SQL expression
+            statement.SqlQuery = $"SELECT {sqlExpression} as A";
+            QueryResult result = statement.ExecuteQuery();
+
+            Assert.NotNull(result.Stream);
+
+            // Verify the schema
+            var schema = result.Stream.Schema;
+            Assert.Single(schema.FieldsList);
+
+            var field = schema.GetFieldByName("A");
+            Assert.NotNull(field);
+
+            OutputHelper?.WriteLine($"Decimal field type: 
{field.DataType.GetType().Name}");
+            OutputHelper?.WriteLine($"Decimal field type ID: 
{field.DataType.TypeId}");
+
+            // Read the actual data
+            var batch = await result.Stream.ReadNextRecordBatchAsync();
+            Assert.NotNull(batch);
+            Assert.Equal(1, batch.Length);
+
+            if (field.DataType is Decimal128Type decimalType)
+            {
+                // For newer DBR versions with UseArrowNativeTypes enabled, 
decimal is returned as Decimal128Type
+                Assert.Equal(expectedPrecision, decimalType.Precision);
+                Assert.Equal(expectedScale, decimalType.Scale);
+
+                var col0 = batch.Column(0) as Decimal128Array;
+                Assert.NotNull(col0);
+                Assert.Equal(1, col0.Length);
+
+                var sqlDecimal = col0.GetSqlDecimal(0);
+                Assert.NotNull(sqlDecimal);
+                Assert.Equal(expectedValue, sqlDecimal.Value);
+
+                OutputHelper?.WriteLine($"Decimal value: {sqlDecimal.Value} 
(precision: {decimalType.Precision}, scale: {decimalType.Scale})");
+            }
+            else if (field.DataType is StringType)

Review Comment:
   @CurtHagenlocher  what would the risk be if we returned a Arrow String here, 
instead of an Arrow Decimal? You said Connector may do it's own conversion? If 
this didn't happen, what would the risk be?
   
   > ADBC connector itself will (at least sometimes) convert the data to match 
the expected schema



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to