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 {