@@ -20,8 +20,6 @@ import (
2020 "fmt"
2121 "io"
2222 "io/ioutil"
23- "math/rand"
24- "net/http"
2523 "os"
2624 "path"
2725 "path/filepath"
@@ -82,16 +80,19 @@ func (a *Action) Context() context.Context {
8280 return a .cmd .Context ()
8381}
8482
83+ // Returns the bool value corresponding to the named flag.
8584func (a * Action ) getBool (name string ) bool {
8685 result , _ := a .cmd .Flags ().GetBool (name )
8786 return result
8887}
8988
89+ // Returns the int value corresponding to the named flag.
9090func (a * Action ) getInt (name string ) int {
9191 result , _ := a .cmd .Flags ().GetInt (name )
9292 return result
9393}
9494
95+ // Returns the rune value corresponding to the named flag.
9596func (a * Action ) getRune (name string ) rune {
9697 s , _ := a .cmd .Flags ().GetString (name )
9798 if s == "" {
@@ -100,11 +101,23 @@ func (a *Action) getRune(name string) rune {
100101 return []rune (s )[0 ]
101102}
102103
104+ // Returns the string value corresponding to the named flag.
103105func (a * Action ) getString (name string ) string {
104106 result , _ := a .cmd .Flags ().GetString (name )
105107 return result
106108}
107109
110+ // Returns the string value corresponding to the named flag, and if no value
111+ // is set, return the value corresponding to the given environment variable.
112+ func (a * Action ) getStringEnv (name , key string ) string {
113+ result , _ := a .cmd .Flags ().GetString (name )
114+ if result == "" {
115+ result = os .Getenv (key )
116+ }
117+ return result
118+ }
119+
120+ // Returns the string array value corresponding to the named flag.
108121func (a * Action ) getStringArray (name string ) []string {
109122 result , _ := a .cmd .Flags ().GetStringArray (name )
110123 return result
@@ -170,7 +183,6 @@ func (a *Action) showValue(v interface{}) {
170183 }
171184 case "json" :
172185 break // default
173-
174186 }
175187 showJSON (v )
176188 }
@@ -192,7 +204,7 @@ func (a *Action) Start(format string, args ...interface{}) *Action {
192204 var msg string
193205 msg = fmt .Sprintf (format , args ... )
194206 msg = fmt .Sprintf ("%s .. " , msg )
195- fmt .Fprintf (os .Stderr , msg )
207+ fmt .Fprintln (os .Stderr , msg )
196208 return a
197209}
198210
@@ -210,6 +222,7 @@ func (a *Action) Exit(result interface{}, err error) {
210222}
211223
212224// Pick a random PROVISIONED engine.
225+ /*
213226func pickRandomEngine(action *Action) string {
214227 rsp, err := action.Client().ListEngines("state", "PROVISIONED")
215228 if err != nil {
@@ -224,6 +237,7 @@ func pickRandomEngine(action *Action) string {
224237 ix := rand.Intn(len(rsp))
225238 return rsp[ix].Name
226239}
240+ */
227241
228242// Pick the most recently created PROVISIONED engine.
229243func pickLatestEngine (action * Action ) string {
@@ -250,25 +264,6 @@ func pickEngine(action *Action) string {
250264 return pickLatestEngine (action )
251265}
252266
253- // Answers if the given state represents a terminal state.
254- func isTerminalState (state , targetState string ) bool {
255- if state == targetState {
256- return true
257- }
258- if strings .Contains (state , "FAILED" ) {
259- return true
260- }
261- return false
262- }
263-
264- func isStatusNotFound (err error ) bool {
265- e , ok := err .(* rai.HTTPError )
266- if ! ok {
267- return false
268- }
269- return e .StatusCode == http .StatusNotFound
270- }
271-
272267//
273268// Databases
274269//
@@ -614,7 +609,7 @@ func listEdbNames(cmd *cobra.Command, args []string) {
614609 for name := range nameMap {
615610 names = append (names , name )
616611 }
617- names = sort .StringSlice (names )
612+ sort .Strings (names )
618613 action .Exit (names , nil )
619614}
620615
@@ -784,17 +779,17 @@ func updateUser(cmd *cobra.Command, args []string) {
784779}
785780
786781//
787- // Integrations
782+ // Snowflake integrations
788783//
789784
790785func createSnowflakeIntegration (cmd * cobra.Command , args []string ) {
791786 action := newAction (cmd )
792787 name := args [0 ]
793- account := action .getString ("account" )
794- adminUsername := action .getString ("admin-username" )
795- adminPassword := action .getString ("admin-password" )
796- proxyUsername := action .getString ("proxy-username" )
797- proxyPassword := action .getString ("proxy-password" )
788+ account := action .getStringEnv ("account" , "SNOWSQL_ACCOUNT " )
789+ adminUsername := action .getStringEnv ("admin-username" , "SNOWSQL_USER " )
790+ adminPassword := action .getStringEnv ("admin-password" , "SNOWSQL_PWD " )
791+ proxyUsername := action .getStringEnv ("proxy-username" , "SNOWSQL_USER " )
792+ proxyPassword := action .getStringEnv ("proxy-password" , "SNOWSQL_PWD " )
798793 adminCreds := rai.SnowflakeCredentials {
799794 Username : adminUsername , Password : adminPassword }
800795 proxyCreds := rai.SnowflakeCredentials {
@@ -808,12 +803,11 @@ func createSnowflakeIntegration(cmd *cobra.Command, args []string) {
808803func deleteSnowflakeIntegration (cmd * cobra.Command , args []string ) {
809804 action := newAction (cmd )
810805 name := args [0 ]
811- adminUsername := action .getString ("admin-username" )
812- adminPassword := action .getString ("admin-password" )
813- adminCreds := rai.SnowflakeCredentials {
814- Username : adminUsername , Password : adminPassword }
806+ username := action .getStringEnv ("username" , "SNOWSQL_USER" )
807+ password := action .getStringEnv ("password" , "SNOWSQL_PWD" )
808+ creds := rai.SnowflakeCredentials {Username : username , Password : password }
815809 action .Start ("Delete Snowflake integration '%s'" , name )
816- err := action .Client ().DeleteSnowflakeIntegration (name , & adminCreds )
810+ err := action .Client ().DeleteSnowflakeIntegration (name , & creds )
817811 action .Exit (nil , err )
818812}
819813
@@ -832,6 +826,61 @@ func listSnowflakeIntegrations(cmd *cobra.Command, _ []string) {
832826 action .Exit (rsp , err )
833827}
834828
829+ //
830+ // Snowflake database links
831+ //
832+
833+ func createSnowflakeDatabaseLink (cmd * cobra.Command , args []string ) {
834+ action := newAction (cmd )
835+ integration := args [0 ]
836+ database := action .getStringEnv ("database" , "SNOWSQL_DATABASE" )
837+ schema := action .getStringEnv ("schema" , "SNOWSQL_SCHEMA" )
838+ role := action .getStringEnv ("role" , "SNOWSQL_ROLE" )
839+ username := action .getStringEnv ("username" , "SNOWSQL_USER" )
840+ password := action .getStringEnv ("username" , "SNOWSQL_PWD" )
841+ creds := rai.SnowflakeCredentials {Username : username , Password : password }
842+ name := fmt .Sprintf ("%s.%s" , database , schema )
843+ action .Start ("Create Snowflake database link '%s' (%s)" , name , integration )
844+ rsp , err := action .Client ().CreateSnowflakeDatabaseLink (
845+ integration , database , schema , role , & creds )
846+ action .Exit (rsp , err )
847+ }
848+
849+ func deleteSnowflakeDatabaseLink (cmd * cobra.Command , args []string ) {
850+ action := newAction (cmd )
851+ integration := args [0 ]
852+ database := action .getStringEnv ("database" , "SNOWSQL_DATABASE" )
853+ schema := action .getStringEnv ("schema" , "SNOWSQL_SCHEMA" )
854+ role := action .getStringEnv ("role" , "SNOWSQL_ROLE" )
855+ username := action .getStringEnv ("username" , "SNOWSQL_USER" )
856+ password := action .getStringEnv ("username" , "SNOWSQL_PWD" )
857+ creds := rai.SnowflakeCredentials {Username : username , Password : password }
858+ name := fmt .Sprintf ("%s.%s" , database , schema )
859+ action .Start ("Delete Snowflake database link '%s' (%s)" , name , integration )
860+ err := action .Client ().DeleteSnowflakeDatabaseLink (
861+ integration , database , schema , role , & creds )
862+ action .Exit (nil , err )
863+ }
864+
865+ func getSnowflakeDatabaseLink (cmd * cobra.Command , args []string ) {
866+ action := newAction (cmd )
867+ integration := args [0 ]
868+ database := action .getStringEnv ("database" , "SNOWSQL_DATABASE" )
869+ schema := action .getStringEnv ("schema" , "SNOWSQL_SCHEMA" )
870+ name := fmt .Sprintf ("%s.%s" , database , schema )
871+ action .Start ("Get Snowflake database link '%s' (%s)" , name , integration )
872+ rsp , err := action .Client ().GetSnowflakeDatabaseLink (integration , database , schema )
873+ action .Exit (rsp , err )
874+ }
875+
876+ func listSnowflakeDatabaseLinks (cmd * cobra.Command , args []string ) {
877+ action := newAction (cmd )
878+ integration := args [0 ]
879+ action .Start ("List Snowflake database links (%s)" , integration )
880+ rsp , err := action .Client ().ListSnowflakeDatabaseLinks (integration )
881+ action .Exit (rsp , err )
882+ }
883+
835884//
836885// Misc
837886//
0 commit comments