Guest User

Untitled

a guest
Apr 26th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. package main
  2.  
  3. // functionally same as `main.go`, with different trigger definition
  4. import (
  5. "database/sql"
  6. "fmt"
  7. sqlite "github.com/mattn/go-sqlite3"
  8. "log"
  9. "os"
  10. )
  11.  
  12. func foobar(y int64) string {
  13. if 0 != y%2 {
  14. return "as if, not even"
  15. }
  16. return ""
  17. }
  18.  
  19. func main() {
  20. sql.Register("sqlite3_custom", &sqlite.SQLiteDriver{
  21. ConnectHook: func(conn *sqlite.SQLiteConn) error {
  22. if err := conn.RegisterFunc("validate", foobar, false); err != nil {
  23. return err
  24. }
  25. return nil
  26. },
  27. })
  28.  
  29. db, err := sql.Open("sqlite3_custom", ":memory:")
  30. if err != nil {
  31. log.Fatal("Failed to open database:", err)
  32. }
  33. defer db.Close()
  34.  
  35. var i string
  36. err = db.QueryRow("SELECT validate(3)").Scan(&i)
  37. if err != nil {
  38. log.Fatal("POW query error:", err)
  39. }
  40. fmt.Println("validate(3) =", i) // 0
  41.  
  42. err = db.QueryRow("SELECT validate(442)").Scan(&i)
  43. if err != nil {
  44. log.Fatal("POW query error:", err)
  45. }
  46. fmt.Println("validate(442) =", i) // 0
  47.  
  48. _, err = db.Exec("create table foo (department integer, profits integer)")
  49. if err != nil {
  50. log.Fatal("Failed to create table:", err)
  51. }
  52.  
  53. mkTrigger := `
  54. CREATE TRIGGER insert_trigger
  55. BEFORE INSERT ON foo
  56. BEGIN
  57. SELECT CASE
  58. WHEN ( (SELECT validate(NEW.department) as error_string) != '')
  59. THEN RAISE(ABORT, "invalid department" )
  60. END;
  61. END;
  62. `
  63. _, err = db.Exec(mkTrigger)
  64. if err != nil {
  65. log.Printf("error creating trigger %q: %s", err, mkTrigger)
  66. os.Exit(1)
  67. return
  68. }
  69.  
  70. log.Println("inserting 1st")
  71. _, err = db.Exec("insert into foo values (10, 10)")
  72. if err != nil {
  73. log.Println("Failed to insert first:", err)
  74. }
  75.  
  76. log.Println("inserting 2nd")
  77. _, err = db.Exec("insert into foo values (11, 10)")
  78. if err != nil {
  79. log.Println("Failed to insert 2nd:", err)
  80. }
  81. }
Add Comment
Please, Sign In to add comment