...

Source file src/github.com/jackc/pgx/v4/examples/todo/main.go

Documentation: github.com/jackc/pgx/v4/examples/todo

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  	"strconv"
     8  
     9  	"github.com/jackc/pgx/v4"
    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  }
   120  

View as plain text