@@ -133,6 +133,7 @@ type configResolver struct {
133133 host cfgVal // string
134134 port cfgVal // int
135135 database cfgVal // string
136+ branch cfgVal // string
136137 user cfgVal // string
137138 password cfgVal // OptionalStr
138139 tlsCAData cfgVal // []byte
@@ -222,6 +223,19 @@ func (r *configResolver) setDatabase(val, source string) error {
222223 return nil
223224}
224225
226+ func (r * configResolver ) setBranch (val , source string ) error {
227+ if r .branch .val != nil {
228+ return nil
229+ }
230+
231+ if val == "" {
232+ return errors .New (`invalid branch name: ""` )
233+ }
234+
235+ r .branch = cfgVal {val : val , source : source }
236+ return nil
237+ }
238+
225239func (r * configResolver ) setUser (val , source string ) error {
226240 if r .user .val != nil {
227241 return nil
@@ -351,17 +365,23 @@ func (r *configResolver) resolveOptions(
351365 }
352366
353367 if opts .Database != "" {
354- e := r .setDatabase (
355- opts .Database ,
356- "Database options" ,
357- )
358- if e != nil {
368+ source := "Database options"
369+ if e := r .setDatabase (opts .Database , source ); e != nil {
359370 return e
360371 }
372+ if opts .Branch == "" {
373+ if e := r .setBranch (opts .Database , source ); e != nil {
374+ return e
375+ }
376+ }
361377 }
362378
363379 if opts .Branch != "" {
364- if e := r .setDatabase (opts .Branch , "Branch options" ); e != nil {
380+ source := "Branch options"
381+ if e := r .setBranch (opts .Branch , source ); e != nil {
382+ return e
383+ }
384+ if e := r .setDatabase (opts .Branch , source ); e != nil {
365385 return e
366386 }
367387 }
@@ -534,7 +554,7 @@ func (r *configResolver) resolveDSN(
534554 return err
535555 } else if val .val != nil {
536556 br := strings .TrimPrefix (val .val .(string ), "/" )
537- if e := r .setDatabase (br , source + val .source ); e != nil {
557+ if e := r .setBranch (br , source + val .source ); e != nil {
538558 return e
539559 }
540560 }
@@ -545,7 +565,7 @@ func (r *configResolver) resolveDSN(
545565 return err
546566 } else if val .val != nil {
547567 db := strings .TrimPrefix (val .val .(string ), "/" )
548- if e := r .setDatabase (db , source + val .source ); e != nil {
568+ if e := r .setBranch (db , source + val .source ); e != nil {
549569 return e
550570 }
551571 }
@@ -744,13 +764,15 @@ func (r *configResolver) applyCredentials(
744764 }
745765
746766 if br , ok := creds .branch .Get (); ok && br != "" {
747- if e := r .setDatabase (br , source ); e != nil {
767+ if e := r .setBranch (br , source ); e != nil {
748768 return e
749769 }
750770 }
751771
752- if e := r .setUser (creds .user , source ); e != nil {
753- return e
772+ if user , ok := creds .user .Get (); ok && user != "" {
773+ if e := r .setUser (user , source ); e != nil {
774+ return e
775+ }
754776 }
755777
756778 if pwd , ok := creds .password .Get (); ok {
@@ -767,13 +789,25 @@ func (r *configResolver) applyCredentials(
767789 }
768790 }
769791
792+ if key , ok := creds .secretKey .Get (); ok {
793+ if e := r .setSecretKey (key , source ); e != nil {
794+ return e
795+ }
796+ }
797+
770798 return nil
771799}
772800
773801func (r * configResolver ) resolveEnvVars (paths * cfgPaths ) (bool , error ) {
774802 db , dbOk := os .LookupEnv ("EDGEDB_DATABASE" )
775803 if dbOk {
776- err := r .setDatabase (db , "EDGEDB_DATABASE environment variable" )
804+ source := "EDGEDB_DATABASE environment variable"
805+ err := r .setDatabase (db , source )
806+ if err != nil {
807+ return false , err
808+ }
809+
810+ err = r .setBranch (db , source )
777811 if err != nil {
778812 return false , err
779813 }
@@ -788,10 +822,13 @@ func (r *configResolver) resolveEnvVars(paths *cfgPaths) (bool, error) {
788822 branchEnvVarName ,
789823 )
790824 }
791- err := r .setDatabase (
792- branch ,
793- fmt .Sprintf ("%s environment variable" , branchEnvVarName ),
794- )
825+ source := fmt .Sprintf ("%s environment variable" , branchEnvVarName )
826+ err := r .setBranch (branch , source )
827+ if err != nil {
828+ return false , err
829+ }
830+
831+ err = r .setDatabase (branch , source )
795832 if err != nil {
796833 return false , err
797834 }
@@ -1005,6 +1042,7 @@ func (r *configResolver) resolveTOML(paths *cfgPaths) error {
10051042 )
10061043}
10071044
1045+ // Returns envvar name and value if found.
10081046func lookupGelOrEdgedbEnv (name string ) (string , string , bool ) {
10091047 gelName := fmt .Sprintf ("GEL%s" , name )
10101048 edbName := fmt .Sprintf ("EDGEDB%s" , name )
@@ -1038,11 +1076,20 @@ func (r *configResolver) config(opts *gelcfg.Options) (*connConfig, error) {
10381076 port = r .port .val .(int )
10391077 }
10401078
1041- database := "edgedb"
10421079 branch := "__default__"
1080+ database := "edgedb"
1081+ if r .branch .val != nil {
1082+ branch = r .branch .val .(string )
1083+ if r .database .val == nil {
1084+ database = branch
1085+ }
1086+ }
1087+
10431088 if r .database .val != nil {
10441089 database = r .database .val .(string )
1045- branch = database
1090+ if r .branch .val == nil && database != "edgedb" {
1091+ branch = database
1092+ }
10461093 }
10471094
10481095 user := "edgedb"
@@ -1332,7 +1379,7 @@ func parseDSN(dsn string) (*url.URL, map[string]string, error) {
13321379 }
13331380
13341381 db := strings .TrimPrefix (uri .Path , "/" )
1335- if e := validateQueryArg (vals , "database " , db ); e != nil {
1382+ if e := validateQueryArg (vals , "branch " , db ); e != nil {
13361383 return nil , nil , e
13371384 }
13381385
@@ -1646,6 +1693,18 @@ func (r *configResolver) parseCloudInstanceNameIntoConfig(
16461693 )
16471694 }
16481695
1696+ if r .secretKey .val == nil {
1697+ if name , key , ok := lookupGelOrEdgedbEnv ("_SECRET_KEY" ); ok {
1698+ err := r .setSecretKey (
1699+ key ,
1700+ fmt .Sprintf ("%s environment variable" , name ),
1701+ )
1702+ if err != nil {
1703+ return err
1704+ }
1705+ }
1706+ }
1707+
16491708 var secretKey string
16501709 if r .secretKey .val != nil {
16511710 secretKey = r .secretKey .val .(string )
0 commit comments