jet/generator/sqlite/sqlite_generator.go

43 lines
1.2 KiB
Go
Raw Normal View History

2021-10-21 13:21:01 +02:00
package sqlite
import (
"database/sql"
"fmt"
"github.com/Gleipnir-Technology/jet/generator/metadata"
"github.com/Gleipnir-Technology/jet/generator/template"
"github.com/Gleipnir-Technology/jet/sqlite"
2021-10-21 13:21:01 +02:00
)
// GenerateDSN generates jet files using dsn connection string
2023-07-21 13:20:44 +02:00
func GenerateDSN(dsn, destDir string, templates ...template.Template) error {
2021-10-21 13:21:01 +02:00
db, err := sql.Open("sqlite3", dsn)
2023-07-21 13:20:44 +02:00
if err != nil {
return fmt.Errorf("failed to open sqlite connection: %w", err)
}
2023-07-21 14:11:31 +02:00
defer db.Close()
2021-10-21 13:21:01 +02:00
fmt.Println("Retrieving schema information...")
return GenerateDB(db, destDir, templates...)
}
2021-10-21 13:21:01 +02:00
// GenerateDB generates jet files using the provided *sql.DB
func GenerateDB(db *sql.DB, destDir string, templates ...template.Template) error {
2021-10-21 13:21:01 +02:00
generatorTemplate := template.Default(sqlite.Dialect)
if len(templates) > 0 {
generatorTemplate = templates[0]
}
2023-07-21 13:20:44 +02:00
schemaMetadata, err := metadata.GetSchema(db, &sqliteQuerySet{}, "")
if err != nil {
return fmt.Errorf("failed to query database metadata: %w", err)
}
err = template.ProcessSchema(destDir, schemaMetadata, generatorTemplate)
if err != nil {
return fmt.Errorf("failed to process database %s: %w", schemaMetadata.Name, err)
}
2021-10-21 13:21:01 +02:00
2023-07-21 13:20:44 +02:00
return nil
2021-10-21 13:21:01 +02:00
}