Skip to content

Commit

Permalink
SNOW-988972 changes after first review
Browse files Browse the repository at this point in the history
  • Loading branch information
sfc-gh-dszmolka committed Dec 12, 2023
1 parent e5255fd commit 5858500
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
2 changes: 1 addition & 1 deletion cmd/insertvariantobject/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
include ../../gosnowflake.mak
CMD_TARGET=insertvariantobject
CMD_TARGET=variant

## Install
install: cinstall
Expand Down
25 changes: 16 additions & 9 deletions cmd/insertvariantobject/insertvariantobject.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,35 +41,42 @@ func main() {
defer db.Close()

param := map[string]string{"key": "value"}
jsonStr, _ := json.Marshal(param)
jsonStr, err := json.Marshal(param)
if err != nil {
log.Fatalf("failed to marshal json. err: %v", err)
}

createTableQuery := "CREATE OR REPLACE TABLE insertvariantobject (c1 VARIANT, c2 OBJECT);"
createTableQuery := "CREATE OR REPLACE TABLE insert_variant_object (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 insertvariantobject (c1, c2) SELECT PARSE_JSON(?), TO_OBJECT(PARSE_JSON(?));"
insertQuery := "INSERT INTO insert_variant_object (c1, c2) SELECT PARSE_JSON(?), TO_OBJECT(PARSE_JSON(?))"
// https://docs.snowflake.com/en/sql-reference/data-types-semistructured#object
insertOnlyObject := "INSERT INTO insertvariantobject (c2) SELECT OBJECT_CONSTRUCT('name', 'Jones'::VARIANT,'age', 42::VARIANT);"
insertOnlyObject := "INSERT INTO insert_variant_object (c2) SELECT OBJECT_CONSTRUCT('name', 'Jones'::VARIANT, 'age', 42::VARIANT)"

selectQuery := "SELECT c1, c2 FROM insertvariantobject;"
selectQuery := "SELECT c1, c2 FROM insert_variant_object"

fmt.Printf("Running CREATE OR REPLACE TABLE\n")
db.Exec(createTableQuery)
fmt.Printf("Running CREATE OR REPLACE TABLE: %v\n", createTableQuery)
_, err = db.Exec(createTableQuery)
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", createTableQuery, err)
}

fmt.Printf("Inserting VARIANT and OBJECT data into table\n")
fmt.Printf("Inserting VARIANT and OBJECT data into table: %v\n", insertQuery)
_, err = db.Exec(insertQuery,
string(jsonStr),
string(jsonStr),
)
if err != nil {
log.Fatalf("failed to run the query. %v, err: %v", insertQuery, err)
}
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)
}

fmt.Printf("Querying the table into which we just inserted the data\n")
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)
Expand Down

0 comments on commit 5858500

Please sign in to comment.