github.com/jackc/pgx/v5@v5.5.5/examples/todo/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "strconv" 8 9 "github.com/jackc/pgx/v5" 10 ) 11 12 var conn *pgx.Conn 13 14 func main() { 15 var err error 16 conn, err = pgx.Connect(context.Background(), os.Getenv("DATABASE_URL")) 17 if err != nil { 18 fmt.Fprintf(os.Stderr, "Unable to connection to database: %v\n", err) 19 os.Exit(1) 20 } 21 22 if len(os.Args) == 1 { 23 printHelp() 24 os.Exit(0) 25 } 26 27 switch os.Args[1] { 28 case "list": 29 err = listTasks() 30 if err != nil { 31 fmt.Fprintf(os.Stderr, "Unable to list tasks: %v\n", err) 32 os.Exit(1) 33 } 34 35 case "add": 36 err = addTask(os.Args[2]) 37 if err != nil { 38 fmt.Fprintf(os.Stderr, "Unable to add task: %v\n", err) 39 os.Exit(1) 40 } 41 42 case "update": 43 n, err := strconv.ParseInt(os.Args[2], 10, 32) 44 if err != nil { 45 fmt.Fprintf(os.Stderr, "Unable convert task_num into int32: %v\n", err) 46 os.Exit(1) 47 } 48 err = updateTask(int32(n), os.Args[3]) 49 if err != nil { 50 fmt.Fprintf(os.Stderr, "Unable to update task: %v\n", err) 51 os.Exit(1) 52 } 53 54 case "remove": 55 n, err := strconv.ParseInt(os.Args[2], 10, 32) 56 if err != nil { 57 fmt.Fprintf(os.Stderr, "Unable convert task_num into int32: %v\n", err) 58 os.Exit(1) 59 } 60 err = removeTask(int32(n)) 61 if err != nil { 62 fmt.Fprintf(os.Stderr, "Unable to remove task: %v\n", err) 63 os.Exit(1) 64 } 65 66 default: 67 fmt.Fprintln(os.Stderr, "Invalid command") 68 printHelp() 69 os.Exit(1) 70 } 71 } 72 73 func listTasks() error { 74 rows, _ := conn.Query(context.Background(), "select * from tasks") 75 76 for rows.Next() { 77 var id int32 78 var description string 79 err := rows.Scan(&id, &description) 80 if err != nil { 81 return err 82 } 83 fmt.Printf("%d. %s\n", id, description) 84 } 85 86 return rows.Err() 87 } 88 89 func addTask(description string) error { 90 _, err := conn.Exec(context.Background(), "insert into tasks(description) values($1)", description) 91 return err 92 } 93 94 func updateTask(itemNum int32, description string) error { 95 _, err := conn.Exec(context.Background(), "update tasks set description=$1 where id=$2", description, itemNum) 96 return err 97 } 98 99 func removeTask(itemNum int32) error { 100 _, err := conn.Exec(context.Background(), "delete from tasks where id=$1", itemNum) 101 return err 102 } 103 104 func printHelp() { 105 fmt.Print(`Todo pgx demo 106 107 Usage: 108 109 todo list 110 todo add task 111 todo update task_num item 112 todo remove task_num 113 114 Example: 115 116 todo add 'Learn Go' 117 todo list 118 `) 119 }