diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index 762e42a677..aec6eb1214 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -37,6 +37,7 @@ func Do(args []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) int rootCmd.PersistentFlags().StringP("file", "f", "", "specify an alternate config file (default: sqlc.yaml)") rootCmd.PersistentFlags().BoolP("experimental", "x", false, "DEPRECATED: enable experimental features (default: false)") rootCmd.PersistentFlags().Bool("no-remote", false, "disable remote execution (default: false)") + rootCmd.PersistentFlags().Bool("no-database", false, "disable database connections (default: false)") rootCmd.AddCommand(checkCmd) rootCmd.AddCommand(diffCmd) @@ -133,18 +134,21 @@ var initCmd = &cobra.Command{ } type Env struct { - DryRun bool - Debug opts.Debug - NoRemote bool + DryRun bool + Debug opts.Debug + NoRemote bool + NoDatabase bool } func ParseEnv(c *cobra.Command) Env { dr := c.Flag("dry-run") nr := c.Flag("no-remote") + nodb := c.Flag("no-database") return Env{ - DryRun: dr != nil && dr.Changed, - Debug: opts.DebugFromEnv(), - NoRemote: nr != nil && nr.Value.String() == "true", + DryRun: dr != nil && dr.Changed, + Debug: opts.DebugFromEnv(), + NoRemote: nr != nil && nr.Value.String() == "true", + NoDatabase: nodb != nil && nodb.Value.String() == "true", } } diff --git a/internal/cmd/vet.go b/internal/cmd/vet.go index 19040cf8ce..d4b2efbff0 100644 --- a/internal/cmd/vet.go +++ b/internal/cmd/vet.go @@ -125,13 +125,14 @@ func Vet(ctx context.Context, e Env, dir, filename string, stderr io.Writer) err } c := checker{ - Checks: checks, - Conf: conf, - Dir: dir, - Env: env, - Envmap: map[string]string{}, - Msgs: msgs, - Stderr: stderr, + Checks: checks, + Conf: conf, + Dir: dir, + Env: env, + Envmap: map[string]string{}, + Msgs: msgs, + Stderr: stderr, + NoDatabase: e.NoDatabase, } errored := false for _, sql := range conf.SQL { @@ -200,13 +201,14 @@ func (p *dbPreparer) Prepare(ctx context.Context, name, query string) error { } type checker struct { - Checks map[string]cel.Program - Conf *config.Config - Dir string - Env *cel.Env - Envmap map[string]string - Msgs map[string]string - Stderr io.Writer + Checks map[string]cel.Program + Conf *config.Config + Dir string + Env *cel.Env + Envmap map[string]string + Msgs map[string]string + Stderr io.Writer + NoDatabase bool } func (c *checker) DSN(dsn string) (string, error) { @@ -250,6 +252,9 @@ func (c *checker) checkSQL(ctx context.Context, s config.SQL) error { // TODO: Add MySQL support var prep preparer if s.Database != nil { + if c.NoDatabase { + return fmt.Errorf("database: connections disabled via command line flag") + } dburl, err := c.DSN(s.Database.URL) if err != nil { return err