You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ze...@apache.org on 2023/05/05 17:26:33 UTC

[arrow-adbc] branch main updated: fix(go/adbc/driver/snowflake): Skip shared dbs that have no data or we can't access (#656)

This is an automated email from the ASF dual-hosted git repository.

zeroshade 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 5920651  fix(go/adbc/driver/snowflake): Skip shared dbs that have no data or we can't access (#656)
5920651 is described below

commit 592065109109918c6969f06eec93ae28fabdef09
Author: Matt Topol <zo...@gmail.com>
AuthorDate: Fri May 5 12:26:28 2023 -0500

    fix(go/adbc/driver/snowflake): Skip shared dbs that have no data or we can't access (#656)
    
    Fixes #655
---
 go/adbc/driver/snowflake/connection.go | 48 ++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/go/adbc/driver/snowflake/connection.go b/go/adbc/driver/snowflake/connection.go
index fdb8bcd..0437e8b 100644
--- a/go/adbc/driver/snowflake/connection.go
+++ b/go/adbc/driver/snowflake/connection.go
@@ -288,6 +288,28 @@ func (c *cnxn) getObjectsDbSchemas(ctx context.Context, depth adbc.ObjectDepth,
 			statement VARCHAR DEFAULT '';
 		BEGIN
 		  FOR rec IN c1 DO
+				LET sharelist RESULTSET := (EXECUTE IMMEDIATE 'SHOW SHARES LIKE \'%' || rec.database_name || '%\'');
+				LET cnt RESULTSET := (SELECT COUNT(*) FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())));
+				LET cnt_cur CURSOR for cnt;
+				LET share_cnt INTEGER DEFAULT 0;
+				OPEN cnt_cur;
+				FETCH cnt_cur INTO share_cnt;
+				CLOSE cnt_cur;
+
+				IF (share_cnt > 0) THEN
+					LET c2 CURSOR for sharelist;
+					LET created_on TIMESTAMP;
+					LET kind VARCHAR DEFAULT '';
+					LET share_name VARCHAR DEFAULT '';
+					LET dbname VARCHAR DEFAULT '';
+					OPEN c2;
+					FETCH c2 INTO created_on, kind, share_name, dbname;
+					CLOSE c2;
+					IF (dbname = '') THEN
+						CONTINUE;
+					END IF;
+				END IF;
+
 				IF (counter > 0) THEN
 				  statement := statement || ' UNION ALL ';
 				END IF;
@@ -414,6 +436,27 @@ func (c *cnxn) getObjectsTables(ctx context.Context, depth adbc.ObjectDepth, cat
 		statement VARCHAR DEFAULT '';
 	BEGIN
 		FOR rec IN c1 DO
+			LET sharelist RESULTSET := (EXECUTE IMMEDIATE 'SHOW SHARES LIKE \'%' || rec.database_name || '%\'');
+			LET cnt RESULTSET := (SELECT COUNT(*) FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())));
+			LET cnt_cur CURSOR for cnt;
+			LET share_cnt INTEGER DEFAULT 0;
+			OPEN cnt_cur;
+			FETCH cnt_cur INTO share_cnt;
+			CLOSE cnt_cur;
+
+			IF (share_cnt > 0) THEN
+				LET c2 CURSOR for sharelist;
+				LET created_on TIMESTAMP;
+				LET kind VARCHAR DEFAULT '';
+				LET share_name VARCHAR DEFAULT '';
+				LET dbname VARCHAR DEFAULT '';
+				OPEN c2;
+				FETCH c2 INTO created_on, kind, share_name, dbname;
+				CLOSE c2;
+				IF (dbname = '') THEN
+					CONTINUE;
+				END IF;
+			END IF;
 			IF (counter > 0) THEN
 				statement := statement || ' UNION ALL ';
 			END IF;
@@ -462,7 +505,8 @@ func (c *cnxn) getObjectsTables(ctx context.Context, depth adbc.ObjectDepth, cat
 	}
 	defer rows.Close()
 
-	var tblCat, tblSchema, tblName, tblType string
+	var tblCat, tblSchema, tblName string
+	var tblType sql.NullString
 	for rows.Next() {
 		if err = rows.Scan(&tblCat, &tblSchema, &tblName, &tblType); err != nil {
 			err = errToAdbcErr(adbc.StatusIO, err)
@@ -473,7 +517,7 @@ func (c *cnxn) getObjectsTables(ctx context.Context, depth adbc.ObjectDepth, cat
 			Catalog: tblCat, Schema: tblSchema}
 
 		result[key] = append(result[key], internal.TableInfo{
-			Name: tblName, TableType: tblType})
+			Name: tblName, TableType: tblType.String})
 	}
 
 	if includeSchema {