/
long_data.go
131 lines (112 loc) · 2.94 KB
/
long_data.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// This example reads URL from stdin and retrieve its content directly to
// database using SendLongData method
package main
import (
"os"
"fmt"
"http"
"strings"
"mymy"
)
func printOK() {
fmt.Println("OK")
}
func checkError(err os.Error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func main() {
user := "testuser"
pass := "TestPasswd9"
dbname := "test"
//proto := "unix"
//addr := "/var/run/mysqld/mysqld.sock"
proto := "tcp"
addr := "127.0.0.1:3306"
db := mymy.New(proto, "", addr, user, pass, dbname)
//db.Debug = true
fmt.Printf("Connect to %s:%s... ", proto, addr)
checkError(db.Connect())
printOK()
fmt.Print("Drop 'web' table if exists... ")
_, err := db.Start("DROP TABLE web")
if err == nil {
printOK()
} else if e, ok := err.(*mymy.Error); ok {
// Error from MySQL server
fmt.Println(e)
} else {
checkError(err)
}
fmt.Print("Create 'web' table... ")
_, err = db.Start("CREATE TABLE web (url VARCHAR(80), content LONGBLOB)")
checkError(err)
printOK()
fmt.Print("Prepare insert statement... ")
ins, err := db.Prepare("INSERT INTO web VALUES (?, ?)")
checkError(err)
printOK()
fmt.Print("Prepare select statement... ")
sel, err := db.Prepare("SELECT url, OCTET_LENGTH(content) FROM web")
checkError(err)
printOK()
var url string
fmt.Print("Bind insert parameters... ")
ins.BindParams(&url, nil)
printOK()
fmt.Println()
for {
url = ""
fmt.Print("Please enter an URL (blank line terminates input): ")
fmt.Scanln(&url)
if len(url) == 0 {
break
}
if !strings.Contains(url, "://") {
url = "http://" + url
}
http_res, _, err := http.Get(url)
if err != nil {
fmt.Println(err)
continue
}
checkError(ins.SendLongData(1, http_res.Body, 4092))
_, err = ins.Execute()
checkError(err)
}
fmt.Println()
fmt.Print("Select from 'web' table... ")
rows, res, err := db.Query(sel)
checkError(err)
printOK()
// Print fields names
fmt.Println()
for _, field := range res.Fields {
fmt.Printf("%-38s ", field.Name)
}
fmt.Println()
fmt.Println("------------------------------------------------------------")
// Print result
for _, row := range rows {
for ii, col := range row.Data {
if col == nil {
fmt.Print("%-38s ", "NULL")
} else {
fmt.Printf("%-38s ", row.Bin(ii))
}
}
fmt.Println()
}
fmt.Println()
fmt.Print("Hit ENTER to exit ")
fmt.Scanln()
fmt.Print("Remove 'web' table... ")
_, err = db.Start("DROP TABLE web")
checkError(err)
printOK()
fmt.Print("Close connection... ")
checkError(db.Close())
printOK()
}