(ctx context.Context, dir, filename, querySetName string, o *Options)
| 39 | } |
| 40 | |
| 41 | func CreateDB(ctx context.Context, dir, filename, querySetName string, o *Options) error { |
| 42 | _, conf, err := o.ReadConfig(dir, filename) |
| 43 | if err != nil { |
| 44 | return err |
| 45 | } |
| 46 | // Find the first queryset with a managed database |
| 47 | var queryset *config.SQL |
| 48 | var count int |
| 49 | for _, sql := range conf.SQL { |
| 50 | sql := sql |
| 51 | if querySetName != "" && sql.Name != querySetName { |
| 52 | continue |
| 53 | } |
| 54 | if sql.Database != nil && sql.Database.Managed { |
| 55 | queryset = &sql |
| 56 | count += 1 |
| 57 | } |
| 58 | } |
| 59 | if queryset == nil && querySetName != "" { |
| 60 | return fmt.Errorf("no queryset found with name %q", querySetName) |
| 61 | } |
| 62 | if queryset == nil { |
| 63 | return fmt.Errorf("no querysets configured to use a managed database") |
| 64 | } |
| 65 | if count > 1 { |
| 66 | return fmt.Errorf("multiple querysets configured to use managed databases") |
| 67 | } |
| 68 | |
| 69 | switch queryset.Engine { |
| 70 | case config.EngineMySQL: |
| 71 | // pass |
| 72 | case config.EnginePostgreSQL: |
| 73 | // pass |
| 74 | default: |
| 75 | return fmt.Errorf("createdb does not support the %s engine", queryset.Engine) |
| 76 | } |
| 77 | |
| 78 | var ddl []string |
| 79 | files, err := sqlpath.Glob(queryset.Schema) |
| 80 | if err != nil { |
| 81 | return err |
| 82 | } |
| 83 | for _, schema := range files { |
| 84 | contents, err := os.ReadFile(schema) |
| 85 | if err != nil { |
| 86 | return fmt.Errorf("read file: %w", err) |
| 87 | } |
| 88 | ddl = append(ddl, migrations.RemoveRollbackStatements(string(contents))) |
| 89 | } |
| 90 | |
| 91 | now := time.Now().UTC().UnixNano() |
| 92 | client := dbmanager.NewClient(conf.Servers) |
| 93 | resp, err := client.CreateDatabase(ctx, &dbmanager.CreateDatabaseRequest{ |
| 94 | Engine: string(queryset.Engine), |
| 95 | Migrations: ddl, |
| 96 | Prefix: fmt.Sprintf("sqlc_createdb_%d", now), |
| 97 | }) |
| 98 | if err != nil { |
no test coverage detected