aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/jackc/pgx/examples/todo/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jackc/pgx/examples/todo/main.go')
-rw-r--r--vendor/github.com/jackc/pgx/examples/todo/main.go140
1 files changed, 140 insertions, 0 deletions
diff --git a/vendor/github.com/jackc/pgx/examples/todo/main.go b/vendor/github.com/jackc/pgx/examples/todo/main.go
new file mode 100644
index 0000000..bacdf24
--- /dev/null
+++ b/vendor/github.com/jackc/pgx/examples/todo/main.go
@@ -0,0 +1,140 @@
+package main
+
+import (
+ "fmt"
+ "github.com/jackc/pgx"
+ "os"
+ "strconv"
+)
+
+var conn *pgx.Conn
+
+func main() {
+ var err error
+ conn, err = pgx.Connect(extractConfig())
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to connection to database: %v\n", err)
+ os.Exit(1)
+ }
+
+ if len(os.Args) == 1 {
+ printHelp()
+ os.Exit(0)
+ }
+
+ switch os.Args[1] {
+ case "list":
+ err = listTasks()
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to list tasks: %v\n", err)
+ os.Exit(1)
+ }
+
+ case "add":
+ err = addTask(os.Args[2])
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to add task: %v\n", err)
+ os.Exit(1)
+ }
+
+ case "update":
+ n, err := strconv.ParseInt(os.Args[2], 10, 32)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable convert task_num into int32: %v\n", err)
+ os.Exit(1)
+ }
+ err = updateTask(int32(n), os.Args[3])
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to update task: %v\n", err)
+ os.Exit(1)
+ }
+
+ case "remove":
+ n, err := strconv.ParseInt(os.Args[2], 10, 32)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable convert task_num into int32: %v\n", err)
+ os.Exit(1)
+ }
+ err = removeTask(int32(n))
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to remove task: %v\n", err)
+ os.Exit(1)
+ }
+
+ default:
+ fmt.Fprintln(os.Stderr, "Invalid command")
+ printHelp()
+ os.Exit(1)
+ }
+}
+
+func listTasks() error {
+ rows, _ := conn.Query("select * from tasks")
+
+ for rows.Next() {
+ var id int32
+ var description string
+ err := rows.Scan(&id, &description)
+ if err != nil {
+ return err
+ }
+ fmt.Printf("%d. %s\n", id, description)
+ }
+
+ return rows.Err()
+}
+
+func addTask(description string) error {
+ _, err := conn.Exec("insert into tasks(description) values($1)", description)
+ return err
+}
+
+func updateTask(itemNum int32, description string) error {
+ _, err := conn.Exec("update tasks set description=$1 where id=$2", description, itemNum)
+ return err
+}
+
+func removeTask(itemNum int32) error {
+ _, err := conn.Exec("delete from tasks where id=$1", itemNum)
+ return err
+}
+
+func printHelp() {
+ fmt.Print(`Todo pgx demo
+
+Usage:
+
+ todo list
+ todo add task
+ todo update task_num item
+ todo remove task_num
+
+Example:
+
+ todo add 'Learn Go'
+ todo list
+`)
+}
+
+func extractConfig() pgx.ConnConfig {
+ var config pgx.ConnConfig
+
+ config.Host = os.Getenv("TODO_DB_HOST")
+ if config.Host == "" {
+ config.Host = "localhost"
+ }
+
+ config.User = os.Getenv("TODO_DB_USER")
+ if config.User == "" {
+ config.User = os.Getenv("USER")
+ }
+
+ config.Password = os.Getenv("TODO_DB_PASSWORD")
+
+ config.Database = os.Getenv("TODO_DB_DATABASE")
+ if config.Database == "" {
+ config.Database = "todo"
+ }
+
+ return config
+}