You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by cu...@apache.org on 2023/12/04 18:42:44 UTC

(arrow-adbc) branch main updated: fix(go/adbc/driver/snowflake): Made GetObjects case insensitive (#1328)

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 7a068647 fix(go/adbc/driver/snowflake): Made GetObjects case insensitive (#1328)
7a068647 is described below

commit 7a0686472bb65dcc9dc160182bff6902466c2934
Author: Ryan Syed <sy...@icloud.com>
AuthorDate: Mon Dec 4 10:42:38 2023 -0800

    fix(go/adbc/driver/snowflake): Made GetObjects case insensitive (#1328)
    
    ### Description:
    `GetObjects` API was inconsistent case sensitivity for patterns.
    `getObjectsDbSchemas` driver implementation used `LIKE` whereas
    `getObjectsTables` used `ILIKE`
    
    ### Solution:
    Based on discussion here:
    https://github.com/apache/arrow-adbc/issues/1314 changed `GetObjects`
    API to use `ILIKE` throughout instead of `LIKE`
    
    ### Testing:
    Added tests for lowercase, uppercase and `_` wildcard
    
    Fixes #1314.
---
 csharp/test/Drivers/Snowflake/DriverTests.cs       | 196 ++++++++-------------
 .../Drivers/Snowflake/SnowflakeTestingUtils.cs     |  24 ++-
 csharp/test/Drivers/Snowflake/ValueTests.cs        |  22 +--
 go/adbc/driver/snowflake/connection.go             |   4 +-
 4 files changed, 106 insertions(+), 140 deletions(-)

diff --git a/csharp/test/Drivers/Snowflake/DriverTests.cs b/csharp/test/Drivers/Snowflake/DriverTests.cs
index 9d1a7af1..ea3574fc 100644
--- a/csharp/test/Drivers/Snowflake/DriverTests.cs
+++ b/csharp/test/Drivers/Snowflake/DriverTests.cs
@@ -39,12 +39,45 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         readonly AdbcDriver _snowflakeDriver;
         readonly AdbcDatabase _database;
         readonly AdbcConnection _connection;
+        readonly List<string> _tableTypes;
+
+        public static IEnumerable<object[]> GetPatterns(string name)
+        {
+            if (string.IsNullOrEmpty(name)) yield break;
+
+            yield return new object[] { name };
+            yield return new object[] { $"{DriverTests.GetPartialNameForPatternMatch(name)}%" };
+            yield return new object[] { $"{DriverTests.GetPartialNameForPatternMatch(name).ToLower()}%" };
+            yield return new object[] { $"{DriverTests.GetPartialNameForPatternMatch(name).ToUpper()}%" };
+            yield return new object[] { $"_{DriverTests.GetNameWithoutFirstChatacter(name)}" };
+            yield return new object[] { $"_{DriverTests.GetNameWithoutFirstChatacter(name).ToLower()}" };
+            yield return new object[] { $"_{DriverTests.GetNameWithoutFirstChatacter(name).ToUpper()}" };
+        }
+
+        public static IEnumerable<object[]> CatalogNamePatternData()
+        {
+            string databaseName = SnowflakeTestingUtils.TestConfiguration?.Metadata.Catalog;
+            return GetPatterns(databaseName);
+        }
+
+        public static IEnumerable<object[]> DbSchemasNamePatternData()
+        {
+            string dbSchemaName = SnowflakeTestingUtils.TestConfiguration?.Metadata.Schema;
+            return GetPatterns(dbSchemaName);
+        }
+
+        public static IEnumerable<object[]> TableNamePatternData()
+        {
+            string tableName = SnowflakeTestingUtils.TestConfiguration?.Metadata.Table;
+            return GetPatterns(tableName);
+        }
 
         public DriverTests()
         {
             Skip.IfNot(Utils.CanExecuteTestConfig(SnowflakeTestingUtils.SNOWFLAKE_TEST_CONFIG_VARIABLE));
-            _testConfiguration = Utils.LoadTestConfiguration<SnowflakeTestConfiguration>(SnowflakeTestingUtils.SNOWFLAKE_TEST_CONFIG_VARIABLE);
+            _testConfiguration = SnowflakeTestingUtils.TestConfiguration;
 
+            _tableTypes = new List<string> { "BASE TABLE", "VIEW" };
             Dictionary<string, string> parameters = new Dictionary<string, string>();
             Dictionary<string, string> options = new Dictionary<string, string>();
             _snowflakeDriver = SnowflakeTestingUtils.GetSnowflakeAdbcDriver(_testConfiguration, out parameters);
@@ -110,109 +143,49 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
             }
         }
 
-        /// <summary>
-        /// Validates if the driver can call GetObjects with GetObjectsDepth as Catalogs.
-        /// </summary>
-        [SkippableFact, Order(3)]
-        public void CanGetObjectsCatalogs()
-        {
-            string databaseName = _testConfiguration.Metadata.Catalog;
-
-            using IArrowArrayStream stream = _connection.GetObjects(
-                    depth: AdbcConnection.GetObjectsDepth.Catalogs,
-                    catalogPattern: databaseName,
-                    dbSchemaPattern: null,
-                    tableNamePattern: null,
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
-                    columnNamePattern: null);
-
-            using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
-
-            List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, null);
-
-            AdbcCatalog catalog = catalogs.FirstOrDefault();
-
-            Assert.True(catalog != null, "catalog should not be null");
-            Assert.Equal(databaseName, catalog.Name);
-        }
-
         /// <summary>
         /// Validates if the driver can call GetObjects with GetObjectsDepth as Catalogs and CatalogName passed as a pattern.
         /// </summary>
-        [SkippableFact, Order(3)]
-        public void CanGetObjectsCatalogsWithPattern()
+        [SkippableTheory, Order(3)]
+        [MemberData(nameof(CatalogNamePatternData))]
+        public void CanGetObjectsCatalogs(string catalogPattern)
         {
             string databaseName = _testConfiguration.Metadata.Catalog;
             string schemaName = _testConfiguration.Metadata.Schema;
-            string partialDatabaseName = GetPartialNameForPatternMatch(databaseName);
-
 
             using IArrowArrayStream stream = _connection.GetObjects(
                     depth: AdbcConnection.GetObjectsDepth.Catalogs,
-                    catalogPattern: $"{partialDatabaseName}%",
+                    catalogPattern: catalogPattern,
                     dbSchemaPattern: null,
                     tableNamePattern: null,
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
+                    tableTypes: _tableTypes,
                     columnNamePattern: null);
 
             using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
 
             List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, null);
-
-            AdbcCatalog catalog = catalogs.FirstOrDefault();
+            AdbcCatalog catalog = catalogs.Where((catalog) => string.Equals(catalog.Name, databaseName)).FirstOrDefault();
 
             Assert.True(catalog != null, "catalog should not be null");
-            Assert.StartsWith(databaseName, catalog.Name);
-        }
-
-        /// <summary>
-        /// Validates if the driver can call GetObjects with GetObjectsDepth as DbSchemas.
-        /// </summary>
-        [SkippableFact, Order(3)]
-        public void CanGetObjectsDbSchemas()
-        {
-            // need to add the database
-            string databaseName = _testConfiguration.Metadata.Catalog;
-            string schemaName = _testConfiguration.Metadata.Schema;
-
-            using IArrowArrayStream stream = _connection.GetObjects(
-                    depth: AdbcConnection.GetObjectsDepth.DbSchemas,
-                    catalogPattern: databaseName,
-                    dbSchemaPattern: schemaName,
-                    tableNamePattern: null,
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
-                    columnNamePattern: null);
-
-            using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
-
-            List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, schemaName);
-
-            List<AdbcDbSchema> dbSchemas = catalogs
-                .Select(s => s.DbSchemas)
-                .FirstOrDefault();
-            AdbcDbSchema dbSchema = dbSchemas.FirstOrDefault();
-
-            Assert.True(dbSchema != null, "dbSchema should not be null");
-            Assert.Equal(schemaName, dbSchema.Name);
         }
 
         /// <summary>
         /// Validates if the driver can call GetObjects with GetObjectsDepth as DbSchemas with DbSchemaName as a pattern.
         /// </summary>
-        [SkippableFact, Order(3)]
-        public void CanGetObjectsDbSchemasWithPattern()
+        [SkippableTheory, Order(3)]
+        [MemberData(nameof(DbSchemasNamePatternData))]
+        public void CanGetObjectsDbSchemas(string dbSchemaPattern)
         {
             // need to add the database
             string databaseName = _testConfiguration.Metadata.Catalog;
             string schemaName = _testConfiguration.Metadata.Schema;
-            string partialSchemaName = GetPartialNameForPatternMatch(schemaName);
 
             using IArrowArrayStream stream = _connection.GetObjects(
                     depth: AdbcConnection.GetObjectsDepth.DbSchemas,
                     catalogPattern: databaseName,
-                    dbSchemaPattern: $"{partialSchemaName}%",
+                    dbSchemaPattern: dbSchemaPattern,
                     tableNamePattern: null,
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
+                    tableTypes: _tableTypes,
                     columnNamePattern: null);
 
             using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
@@ -220,66 +193,32 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
             List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, schemaName);
 
             List<AdbcDbSchema> dbSchemas = catalogs
-                .Select(s => s.DbSchemas)
+                .Where(c => string.Equals(c.Name, databaseName))
+                .Select(c => c.DbSchemas)
                 .FirstOrDefault();
-            AdbcDbSchema dbSchema = dbSchemas.FirstOrDefault();
+            AdbcDbSchema dbSchema = dbSchemas.Where((dbSchema) => string.Equals(dbSchema.Name, schemaName)).FirstOrDefault();
 
             Assert.True(dbSchema != null, "dbSchema should not be null");
-            Assert.StartsWith(partialSchemaName, dbSchema.Name);
-        }
-
-        /// <summary>
-        /// Validates if the driver can call GetObjects with GetObjectsDepth as Tables.
-        /// </summary>
-        [SkippableFact, Order(3)]
-        public void CanGetObjectsTables()
-        {
-            // need to add the database
-            string databaseName = _testConfiguration.Metadata.Catalog;
-            string schemaName = _testConfiguration.Metadata.Schema;
-            string tableName = _testConfiguration.Metadata.Table;
-
-            using IArrowArrayStream stream = _connection.GetObjects(
-                    depth: AdbcConnection.GetObjectsDepth.All,
-                    catalogPattern: databaseName,
-                    dbSchemaPattern: schemaName,
-                    tableNamePattern: tableName,
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
-                    columnNamePattern: null);
-
-            using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
-
-            List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, schemaName);
-
-            List<AdbcTable> tables = catalogs
-                .Select(s => s.DbSchemas)
-                .FirstOrDefault()
-                .Select(t => t.Tables)
-                .FirstOrDefault();
-            AdbcTable table = tables.FirstOrDefault();
-
-            Assert.True(table != null, "table should not be null");
-            Assert.Equal(tableName, table.Name);
         }
 
         /// <summary>
         /// Validates if the driver can call GetObjects with GetObjectsDepth as Tables with TableName as a pattern.
         /// </summary>
-        [SkippableFact, Order(3)]
-        public void CanGetObjectsTablesWithPattern()
+        [SkippableTheory, Order(3)]
+        [MemberData(nameof(TableNamePatternData))]
+        public void CanGetObjectsTables(string tableNamePattern)
         {
             // need to add the database
             string databaseName = _testConfiguration.Metadata.Catalog;
             string schemaName = _testConfiguration.Metadata.Schema;
             string tableName = _testConfiguration.Metadata.Table;
-            string partialTableName = GetPartialNameForPatternMatch(tableName);
 
             using IArrowArrayStream stream = _connection.GetObjects(
                     depth: AdbcConnection.GetObjectsDepth.All,
                     catalogPattern: databaseName,
                     dbSchemaPattern: schemaName,
-                    tableNamePattern: $"{partialTableName}%",
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
+                    tableNamePattern: tableNamePattern,
+                    tableTypes: _tableTypes,
                     columnNamePattern: null);
 
             using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
@@ -287,14 +226,15 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
             List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, schemaName);
 
             List<AdbcTable> tables = catalogs
-                .Select(s => s.DbSchemas)
+                .Where(c => string.Equals(c.Name, databaseName))
+                .Select(c => c.DbSchemas)
                 .FirstOrDefault()
-                .Select(t => t.Tables)
+                .Where(s => string.Equals(s.Name, schemaName))
+                .Select(s => s.Tables)
                 .FirstOrDefault();
-            AdbcTable table = tables.FirstOrDefault();
 
+            AdbcTable table = tables.Where((table) => string.Equals(table.Name, tableName)).FirstOrDefault();
             Assert.True(table != null, "table should not be null");
-            Assert.StartsWith(partialTableName, table.Name);
         }
 
         /// <summary>
@@ -314,7 +254,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
                     catalogPattern: databaseName,
                     dbSchemaPattern: schemaName,
                     tableNamePattern: tableName,
-                    tableTypes: new List<string> { "BASE TABLE", "VIEW" },
+                    tableTypes: _tableTypes,
                     columnNamePattern: columnName);
 
             using RecordBatch recordBatch = stream.ReadNextRecordBatchAsync().Result;
@@ -322,11 +262,14 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
             List<AdbcCatalog> catalogs = GetObjectsParser.ParseCatalog(recordBatch, databaseName, schemaName);
 
             List<AdbcColumn> columns = catalogs
-                .Select(s => s.DbSchemas)
+                .Where(c => string.Equals(c.Name, databaseName))
+                .Select(c => c.DbSchemas)
                 .FirstOrDefault()
-                .Select(t => t.Tables)
+                .Where(s => string.Equals(s.Name, schemaName))
+                .Select(s => s.Tables)
                 .FirstOrDefault()
-                .Select(c => c.Columns)
+                .Where(t => string.Equals(t.Name, tableName))
+                .Select(t => t.Columns)
                 .FirstOrDefault();
 
             Assert.True(columns != null, "Columns cannot be null");
@@ -411,13 +354,20 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
             Tests.DriverTests.CanExecuteQuery(queryResult, _testConfiguration.ExpectedResultsCount);
         }
 
-        private string GetPartialNameForPatternMatch(string name)
+        private static string GetPartialNameForPatternMatch(string name)
         {
             if (string.IsNullOrEmpty(name) || name.Length == 1) return name;
 
             return name.Substring(0, name.Length / 2);
         }
 
+        private static string GetNameWithoutFirstChatacter(string name)
+        {
+            if (string.IsNullOrEmpty(name)) return name;
+
+            return name.Substring(1);
+        }
+
         public void Dispose()
         {
             _connection.Dispose();
diff --git a/csharp/test/Drivers/Snowflake/SnowflakeTestingUtils.cs b/csharp/test/Drivers/Snowflake/SnowflakeTestingUtils.cs
index 0da3eff7..18fcafb6 100644
--- a/csharp/test/Drivers/Snowflake/SnowflakeTestingUtils.cs
+++ b/csharp/test/Drivers/Snowflake/SnowflakeTestingUtils.cs
@@ -15,11 +15,13 @@
 * limitations under the License.
 */
 
+using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
 using Apache.Arrow.Adbc.C;
+using Xunit;
 
 namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
 {
@@ -40,8 +42,22 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
 
     internal class SnowflakeTestingUtils
     {
+        internal static readonly SnowflakeTestConfiguration TestConfiguration;
+
         internal const string SNOWFLAKE_TEST_CONFIG_VARIABLE = "SNOWFLAKE_TEST_CONFIG_FILE";
 
+        static SnowflakeTestingUtils()
+        {
+            try
+            {
+                TestConfiguration = Utils.LoadTestConfiguration<SnowflakeTestConfiguration>(SnowflakeTestingUtils.SNOWFLAKE_TEST_CONFIG_VARIABLE);
+            }
+            catch (InvalidOperationException ex)
+            {
+                Console.WriteLine(ex.Message);
+            }
+        }
+
         /// <summary>
         /// Gets a the Snowflake ADBC driver with settings from the
         /// <see cref="SnowflakeTestConfiguration"/>.
@@ -66,12 +82,12 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
                 { SnowflakeParameters.USE_HIGH_PRECISION, testConfiguration.UseHighPrecision.ToString().ToLowerInvariant() }
             };
 
-            if(!string.IsNullOrWhiteSpace(testConfiguration.Host))
+            if (!string.IsNullOrWhiteSpace(testConfiguration.Host))
             {
                 parameters[SnowflakeParameters.HOST] = testConfiguration.Host;
             }
 
-            if(!string.IsNullOrWhiteSpace(testConfiguration.Database))
+            if (!string.IsNullOrWhiteSpace(testConfiguration.Database))
             {
                 parameters[SnowflakeParameters.DATABASE] = testConfiguration.Database;
             }
@@ -120,9 +136,9 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
                 {
                     string modifiedLine = line;
 
-                    foreach(string key in placeholderValues.Keys)
+                    foreach (string key in placeholderValues.Keys)
                     {
-                        if(modifiedLine.Contains(key))
+                        if (modifiedLine.Contains(key))
                             modifiedLine = modifiedLine.Replace(key, placeholderValues[key]);
                     }
 
diff --git a/csharp/test/Drivers/Snowflake/ValueTests.cs b/csharp/test/Drivers/Snowflake/ValueTests.cs
index 84b4af84..511a46d1 100644
--- a/csharp/test/Drivers/Snowflake/ValueTests.cs
+++ b/csharp/test/Drivers/Snowflake/ValueTests.cs
@@ -41,7 +41,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         public ValueTests()
         {
             Skip.IfNot(Utils.CanExecuteTestConfig(SnowflakeTestingUtils.SNOWFLAKE_TEST_CONFIG_VARIABLE));
-            _snowflakeTestConfiguration = Utils.LoadTestConfiguration<SnowflakeTestConfiguration>(SnowflakeTestingUtils.SNOWFLAKE_TEST_CONFIG_VARIABLE);
+            _snowflakeTestConfiguration = SnowflakeTestingUtils.TestConfiguration;
             Dictionary<string, string> parameters = new Dictionary<string,string>();
             Dictionary<string, string> options = new Dictionary<string, string>();
             AdbcDriver snowflakeDriver = SnowflakeTestingUtils.GetSnowflakeAdbcDriver(_snowflakeTestConfiguration, out parameters);
@@ -55,7 +55,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// Validates if driver can send and receive specific Integer values correctly
         /// These Snowflake types are equivalent: NUMBER(38,0),INT,INTEGER,BIGINT,SMALLINT,TINYINT,BYTEINT
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData(-1)]
         [InlineData(0)]
         [InlineData(1)]
@@ -69,7 +69,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver can handle the largest / smallest numbers
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData("99999999999999999999999999999999999999")]
         [InlineData("-99999999999999999999999999999999999999")]
         public void TestIntegerMinMax(string value)
@@ -82,7 +82,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver can handle smaller Number type correctly
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData(-1)]
         [InlineData(0)]
         [InlineData(1)]
@@ -98,7 +98,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver correctly errors out when the values exceed the column's limit
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData(-100)]
         [InlineData(100)]
         [InlineData(int.MaxValue)]
@@ -113,7 +113,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver can handle a large scale Number type correctly
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData("0")]
         [InlineData("-2.003")]
         [InlineData("4.85")]
@@ -129,7 +129,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver can error handle when input goes beyond a large scale Number type
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData("-10")]
         [InlineData("10")]
         [InlineData("99999999999999999999999999999999999999")]
@@ -144,7 +144,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver can handle a small scale Number type correctly
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData("0")]
         [InlineData("4.85")]
         [InlineData("-999999999999999999999999999999999999.99")]
@@ -159,7 +159,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// <summary>
         /// Validates if driver can error handle when an insert goes beyond a small scale Number type correctly
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData("-99999999999999999999999999999999999999")]
         [InlineData("99999999999999999999999999999999999999")]
         public void TestSmallScaleNumberOverlimit(string value)
@@ -174,7 +174,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// Tests that decimals are rounded as expected.
         /// Snowflake allows inserts of scales beyond the data type size, but storage of value will round it up or down
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData(2.467, 2.47)]
         [InlineData(-672.613, -672.61)]
         public void TestRoundingNumbers(decimal input, decimal output)
@@ -192,7 +192,7 @@ namespace Apache.Arrow.Adbc.Tests.Drivers.Interop.Snowflake
         /// Validates if driver can handle floating point number type correctly
         /// These Snowflake types are equivalent: FLOAT,FLOAT4,FLOAT8,DOUBLE,DOUBLE PRECISION,REAL
         /// </summary>
-        [Theory]
+        [SkippableTheory]
         [InlineData(0)]
         [InlineData(0.2)]
         [InlineData(15e-03)]
diff --git a/go/adbc/driver/snowflake/connection.go b/go/adbc/driver/snowflake/connection.go
index 1b2d72ef..e9679993 100644
--- a/go/adbc/driver/snowflake/connection.go
+++ b/go/adbc/driver/snowflake/connection.go
@@ -282,10 +282,10 @@ func (c *cnxn) getObjectsDbSchemas(ctx context.Context, depth adbc.ObjectDepth,
 
 	conditions := make([]string, 0)
 	if catalog != nil && *catalog != "" {
-		conditions = append(conditions, ` CATALOG_NAME LIKE '`+*catalog+`'`)
+		conditions = append(conditions, ` CATALOG_NAME ILIKE '`+*catalog+`'`)
 	}
 	if dbSchema != nil && *dbSchema != "" {
-		conditions = append(conditions, ` SCHEMA_NAME LIKE '`+*dbSchema+`'`)
+		conditions = append(conditions, ` SCHEMA_NAME ILIKE '`+*dbSchema+`'`)
 	}
 
 	cond := strings.Join(conditions, " AND ")