Skip to content

Commit 3433106

Browse files
authored
cmd: Add the --experimental flag (#929)
Put Python support behind the experimental flag. New languages and databases will go behind the flag until their implementation is stable.
1 parent 2b14b7d commit 3433106

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

internal/cmd/cmd.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
func Do(args []string, stdin io.Reader, stdout io.Writer, stderr io.Writer) int {
2020
rootCmd := &cobra.Command{Use: "sqlc", SilenceUsage: true}
2121
rootCmd.PersistentFlags().StringP("file", "f", "", "specify an alternate config file (default: sqlc.yaml)")
22+
rootCmd.PersistentFlags().BoolP("experimental", "x", false, "enable experimental features (default: false)")
2223

2324
rootCmd.AddCommand(checkCmd)
2425
rootCmd.AddCommand(genCmd)
@@ -76,10 +77,12 @@ var initCmd = &cobra.Command{
7677
}
7778

7879
type Env struct {
80+
ExperimentalFeatures bool
7981
}
8082

81-
func ParseEnv() Env {
82-
return Env{}
83+
func ParseEnv(c *cobra.Command) Env {
84+
x := c.Flag("experimental")
85+
return Env{ExperimentalFeatures: x != nil && x.Changed}
8386
}
8487

8588
func getConfigPath(stderr io.Writer, f *pflag.Flag) (string, string) {
@@ -111,7 +114,7 @@ var genCmd = &cobra.Command{
111114
Run: func(cmd *cobra.Command, args []string) {
112115
stderr := cmd.ErrOrStderr()
113116
dir, name := getConfigPath(stderr, cmd.Flag("file"))
114-
output, err := Generate(ParseEnv(), dir, name, stderr)
117+
output, err := Generate(ParseEnv(cmd), dir, name, stderr)
115118
if err != nil {
116119
os.Exit(1)
117120
}
@@ -131,7 +134,7 @@ var checkCmd = &cobra.Command{
131134
RunE: func(cmd *cobra.Command, args []string) error {
132135
stderr := cmd.ErrOrStderr()
133136
dir, name := getConfigPath(stderr, cmd.Flag("file"))
134-
if _, err := Generate(Env{}, dir, name, stderr); err != nil {
137+
if _, err := Generate(ParseEnv(cmd), dir, name, stderr); err != nil {
135138
os.Exit(1)
136139
}
137140
return nil

internal/cmd/generate.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ func Generate(e Env, dir, filename string, stderr io.Writer) (map[string]string,
122122
})
123123
}
124124
if sql.Gen.Python != nil {
125+
if !e.ExperimentalFeatures {
126+
fmt.Fprintf(stderr, "error parsing %s: unknown target langauge \"python\"\n", base)
127+
return nil, fmt.Errorf("unknown target language \"python\"")
128+
}
125129
pairs = append(pairs, outPair{
126130
SQL: sql,
127131
Gen: config.SQLGen{Python: sql.Gen.Python},

internal/endtoend/endtoend_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestExamples(t *testing.T) {
3535
t.Parallel()
3636
path := filepath.Join(examples, tc)
3737
var stderr bytes.Buffer
38-
output, err := cmd.Generate(cmd.Env{}, path, "", &stderr)
38+
output, err := cmd.Generate(cmd.Env{ExperimentalFeatures: true}, path, "", &stderr)
3939
if err != nil {
4040
t.Fatalf("sqlc generate failed: %s", stderr.String())
4141
}
@@ -62,7 +62,7 @@ func BenchmarkExamples(b *testing.B) {
6262
path := filepath.Join(examples, tc)
6363
for i := 0; i < b.N; i++ {
6464
var stderr bytes.Buffer
65-
cmd.Generate(cmd.Env{}, path, "", &stderr)
65+
cmd.Generate(cmd.Env{ExperimentalFeatures: true}, path, "", &stderr)
6666
}
6767
})
6868
}
@@ -91,7 +91,7 @@ func TestReplay(t *testing.T) {
9191
path, _ := filepath.Abs(tc)
9292
var stderr bytes.Buffer
9393
expected := expectedStderr(t, path)
94-
output, err := cmd.Generate(cmd.Env{}, path, "", &stderr)
94+
output, err := cmd.Generate(cmd.Env{ExperimentalFeatures: true}, path, "", &stderr)
9595
if len(expected) == 0 && err != nil {
9696
t.Fatalf("sqlc generate failed: %s", stderr.String())
9797
}
@@ -188,7 +188,7 @@ func BenchmarkReplay(b *testing.B) {
188188
path, _ := filepath.Abs(tc)
189189
for i := 0; i < b.N; i++ {
190190
var stderr bytes.Buffer
191-
cmd.Generate(cmd.Env{}, path, "", &stderr)
191+
cmd.Generate(cmd.Env{ExperimentalFeatures: true}, path, "", &stderr)
192192
}
193193
})
194194
}

0 commit comments

Comments
 (0)