Skip to content

Commit

Permalink
SNOW-988972 changes
Browse files Browse the repository at this point in the history
* minor reword of printing Create table
* adding unique table name
* printing query result type
* adding DROP after last query
  • Loading branch information
sfc-gh-dszmolka committed Dec 12, 2023
1 parent 5858500 commit daf06b3
Showing 1 changed file with 24 additions and 14 deletions.
38 changes: 24 additions & 14 deletions cmd/insertvariantobject/insertvariantobject.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package main

import (
"database/sql"
"encoding/json"
"flag"
"fmt"
"log"
"encoding/json"
"strconv"
"time"

sf "github.com/snowflakedb/gosnowflake"
)
Expand Down Expand Up @@ -40,23 +42,26 @@ func main() {
}
defer db.Close()

tablename := "insert_variant_object_" + strconv.FormatInt(time.Now().UnixNano(), 10)
param := map[string]string{"key": "value"}
jsonStr, err := json.Marshal(param)
if err != nil {
log.Fatalf("failed to marshal json. err: %v", err)
}

createTableQuery := "CREATE OR REPLACE TABLE insert_variant_object (c1 VARIANT, c2 OBJECT)"
createTableQuery := "CREATE TABLE " + tablename + " (c1 VARIANT, c2 OBJECT)"

// https://docs.snowflake.com/en/sql-reference/functions/parse_json
// can do with TO_VARIANT(PARSE_JSON(..)) as well, but PARSE_JSON already produces VARIANT
insertQuery := "INSERT INTO insert_variant_object (c1, c2) SELECT PARSE_JSON(?), TO_OBJECT(PARSE_JSON(?))"
insertQuery := "INSERT INTO " + tablename + " (c1, c2) SELECT PARSE_JSON(?), TO_OBJECT(PARSE_JSON(?))"
// https://docs.snowflake.com/en/sql-reference/data-types-semistructured#object
insertOnlyObject := "INSERT INTO insert_variant_object (c2) SELECT OBJECT_CONSTRUCT('name', 'Jones'::VARIANT, 'age', 42::VARIANT)"
insertOnlyObject := "INSERT INTO " + tablename + " (c2) SELECT OBJECT_CONSTRUCT('name', 'Jones'::VARIANT, 'age', 42::VARIANT)"

selectQuery := "SELECT c1, c2 FROM " + tablename

selectQuery := "SELECT c1, c2 FROM insert_variant_object"
dropQuery := "DROP TABLE " + tablename

fmt.Printf("Running CREATE OR REPLACE TABLE: %v\n", createTableQuery)
fmt.Printf("Creating table: %v\n", createTableQuery)
_, err = db.Exec(createTableQuery)
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", createTableQuery, err)
Expand All @@ -72,27 +77,32 @@ func main() {
}
fmt.Printf("Now for another approach: %v\n", insertOnlyObject)
_, err = db.Exec(insertOnlyObject)
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", insertOnlyObject, err)
}
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", insertOnlyObject, err)
}

fmt.Printf("Querying the table into which we just inserted the data: %v\n", selectQuery)
rows, err := db.Query(selectQuery)
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", selectQuery, err)
}
defer rows.Close()
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", selectQuery, err)
}
defer rows.Close()
var c1, c2 any
for rows.Next() {
err := rows.Scan(&c1, &c2)
if err != nil {
log.Fatalf("failed to get result. err: %v", err)
}
fmt.Printf("%v, %v\n", c1, c2)
fmt.Printf("%v (type: %T), %v (type: %T)\n", c1, c1, c2, c2)
}
if rows.Err() != nil {
fmt.Printf("ERROR: %v\n", rows.Err())
return
}
fmt.Printf("Dropping the table: %v\n", dropQuery)
_, err = db.Exec(dropQuery)
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", dropQuery, err)
}

}

0 comments on commit daf06b3

Please sign in to comment.