Skip to content

Commit

Permalink
Fixed broken examples. Use of defer statement to ensure closing of Da…
Browse files Browse the repository at this point in the history
…tabase and cleanup of statement.
  • Loading branch information
jim teeuwen committed Dec 21, 2010
1 parent b0cf472 commit b508896
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 59 deletions.
23 changes: 23 additions & 0 deletions Examples/makefile
@@ -0,0 +1,23 @@
include $(GOROOT)/src/Make.inc

EXAMPLES = query reconnect statement

all: $(EXAMPLES)

query:
$(GC) -o $(@).$(O) $(@).go
$(LD) -s -o $(@) $(@).$(O)

reconnect:
$(GC) -o $(@).$(O) $(@).go
$(LD) -s -o $(@) $(@).$(O)

statement:
$(GC) -o $(@).$(O) $(@).go
$(LD) -s -o $(@) $(@).$(O)

clean:
rm -rf *.[568oa] $(EXAMPLES)



39 changes: 23 additions & 16 deletions Examples/query.go
Expand Up @@ -9,39 +9,46 @@ import (
)

func main() {
var err os.Error
var res *mysql.MySQLResult
var row map[string]interface{}
var key string
var value interface{}

// Create new instance
db := mysql.New()

// Enable logging
db.Logging = true

// Connect to database
db.Connect("localhost", "root", "********", "gotesting")
if db.Errno != 0 {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
if err = db.Connect("localhost", "root", "********", "gotesting"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

defer db.Close()

// Use UTF8
db.Query("SET NAMES utf8")
if db.Errno != 0 {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
if _, err = db.Query("SET NAMES utf8"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

// Query database
res := db.Query("SELECT * FROM test1 LIMIT 5")
if db.Errno != 0 {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
if res, err = db.Query("SELECT * FROM test1 LIMIT 5"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
// Display results
var row map[string]interface{}

for {
row = res.FetchMap()
if row == nil {
if row = res.FetchMap(); row == nil {
break
}
for key, value := range row {

for key, value = range row {
fmt.Printf("%s:%v\n", key, value)
}
}
// Close connection
db.Close()

}
46 changes: 26 additions & 20 deletions Examples/reconnect.go
Expand Up @@ -11,46 +11,52 @@ import (
)

// Reconnect function, attempts to reconnect once per second
func reconnect(db *mysql.MySQL, done chan int) {
func reconnect(db *mysql.MySQL, done chan bool) {
var err os.Error
attempts := 0

for {
// Sleep for 1 second
time.Sleep(1000000000)
time.Sleep(1e9)

// Attempt to reconnect
db.Reconnect()
// If there was no error break for loop
if db.Errno == 0 {
if err = db.Reconnect(); err != nil {
break
} else {
attempts++
fmt.Printf("Reconnect attempt %d failed\n", attempts)
}

attempts++
fmt.Fprintf(os.Stderr, "Reconnect attempt %d failed\n", attempts)
}
done <- 1

done <- true
}

func main() {
var err os.Error

// Create new instance
db := mysql.New()
// Enable logging
db.Logging = true

// Connect to database
db.Connect("localhost", "root", "********", "gotesting")
if db.Errno != 0 {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
if err = db.Connect("localhost", "root", "********", "gotesting"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

// Ensure connection is closed on exit.
defer db.Close()

done := make(chan bool)

// Repeat query forever
for {
res := db.Query("select * from test1")
// On error reconnect to the server
if res == nil {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
done := make(chan int)
if _, err = db.Query("SELECT * FROM test1 LIMIT 5"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
go reconnect(db, done)
<-done
}

// Sleep for 0.5 seconds
time.Sleep(500000000)
time.Sleep(5e8)
}
}
57 changes: 34 additions & 23 deletions Examples/statement.go
Expand Up @@ -9,51 +9,62 @@ import (
)

func main() {
var err os.Error
var res *mysql.MySQLResult
var row map[string]interface{}
var key string
var value interface{}
var stmt *mysql.MySQLStatement

// Create new instance
db := mysql.New()
// Enable logging
db.Logging = true

// Connect to database
db.Connect("localhost", "root", "********", "gotesting")
if db.Errno != 0 {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
if err = db.Connect("localhost", "root", "********", "gotesting"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

// Ensure connection is closed on exit.
defer db.Close()

// Use UTF8
db.Query("SET NAMES utf8")
if db.Errno != 0 {
fmt.Printf("Error #%d %s\n", db.Errno, db.Error)
if _, err = db.Query("SET NAMES utf8"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

// Initialise statement
stmt := db.InitStmt()
if stmt, err = db.InitStmt(); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

// Prepare statement
stmt.Prepare("SELECT * FROM test1 WHERE id > ? AND id < ?")
if stmt.Errno != 0 {
fmt.Printf("Error #%d %s\n", stmt.Errno, stmt.Error)
if err = stmt.Prepare("SELECT * FROM test1 WHERE id > ? AND id < ?"); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

// Bind params
stmt.BindParams(1, 5)

// Execute statement
res := stmt.Execute()
if stmt.Errno != 0 {
fmt.Printf("Error #%d %s\n", stmt.Errno, stmt.Error)
if res, err = stmt.Execute(); err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}

defer stmt.Close()

// Display results
var row map[string]interface{}
for {
row = res.FetchMap()
if row == nil {
if row = res.FetchMap(); row == nil {
break
}
for key, value := range row {

for key, value = range row {
fmt.Printf("%s:%v\n", key, value)
}
}
// Close statement
stmt.Close()
// Close connection
db.Close()
}

0 comments on commit b508896

Please sign in to comment.