126 lines
3 KiB
Go
126 lines
3 KiB
Go
//zlint:file-ignore U1000 this is a variable source demo
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
|
|
"entgo.io/ent/dialect/sql"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
// _ "github.com/mattn/go-sqlite3"
|
|
|
|
"code.osinet.fr/fgm/go__ent_demo/ent"
|
|
)
|
|
|
|
const (
|
|
name = "a8m"
|
|
dbPath = "ent.db"
|
|
)
|
|
|
|
func userDemo(ctx context.Context, client *ent.Client) {
|
|
u, err := CreateUser(ctx, client)
|
|
if err != nil {
|
|
log.Fatalf("failed creating user: %v", err)
|
|
}
|
|
fmt.Println("created: ", u)
|
|
|
|
u, err = QueryUser(ctx, client)
|
|
if err != nil {
|
|
log.Fatalf("failed querying user: %v", err)
|
|
}
|
|
fmt.Println("found: ", u)
|
|
}
|
|
|
|
func edgeDemo(ctx context.Context, client *ent.Client) {
|
|
u, err := CreateCars(ctx, client)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println("owner: ", u)
|
|
}
|
|
|
|
func setupSQLite() (*ent.Client, error) {
|
|
if err := os.Remove(dbPath); err != nil && !errors.Is(err, os.ErrNotExist) {
|
|
return nil, fmt.Errorf("failed cleaning up old DB: %w", err)
|
|
}
|
|
|
|
// client, err := ent.Open("sqlite3", "file:ent.db?mode=memory&cache=shared&_fk=1")
|
|
client, err := ent.Open("sqlite3", "file:"+dbPath+"?cache=shared&_fk=1")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed opening connection to SQLite: %w", err)
|
|
}
|
|
return client, err
|
|
}
|
|
|
|
func setupMariaDB() (*ent.Client, error) {
|
|
user := os.Getenv("ENTDEMO_USER")
|
|
pass := os.Getenv("ENTDEMO_PASS")
|
|
drv, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/go_entdemo?parseTime=true", user, pass))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed opening connection to DB server: %w", err)
|
|
}
|
|
db := drv.DB()
|
|
db.SetMaxIdleConns(10)
|
|
db.SetMaxOpenConns(100)
|
|
db.SetConnMaxLifetime(time.Hour)
|
|
|
|
db.Exec("SET foreign_key_checks = 0")
|
|
for _, tbl := range []string{
|
|
"cars",
|
|
"group_users",
|
|
"groups",
|
|
"user_following",
|
|
"user_friends",
|
|
"users",
|
|
} {
|
|
_, err := db.Exec("DROP TABLE IF EXISTS " + tbl)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("dropping table %s: %w", tbl, err)
|
|
}
|
|
}
|
|
db.Exec("SET foreign_key_checks = 1")
|
|
return ent.NewClient(ent.Driver(drv)), nil
|
|
}
|
|
|
|
func setup(ctx context.Context) (client *ent.Client, err error) {
|
|
// if client, err = setupSQLite(); err != nil {
|
|
// return nil, err
|
|
// }
|
|
if client, err = setupMariaDB(); err != nil {
|
|
return nil, err
|
|
}
|
|
// Run the auto migration tool.
|
|
if err := client.Debug().Schema.Create(ctx); // schema.WithGlobalUniqueID(true),
|
|
err != nil {
|
|
return nil, fmt.Errorf("failed creating schema resources: %w", err)
|
|
}
|
|
return client, nil
|
|
}
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
client, err := setup(ctx)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
defer client.Close()
|
|
|
|
// userDemo(ctx, client)
|
|
// edgeDemo(ctx, client)
|
|
if err := CreateGraph(ctx, client); err != nil {
|
|
log.Fatalf("failed creating graph: %c", err)
|
|
}
|
|
// if err := QueryGithub(ctx, client); err != nil {
|
|
// log.Fatalf("failed querying github cars: %v", err)
|
|
// }
|
|
if err := QueryArielCars(ctx, client); err != nil {
|
|
log.Fatalf("failed querying Ariel's cars: %v", err)
|
|
}
|
|
// if err := QueryGroupWithUsers(ctx, client); err != nil {
|
|
// log.Fatalf("failed querying groups with users: %v", err)
|
|
// }
|
|
}
|