Skip to content

Instantly share code, notes, and snippets.

@xaprb
Created January 8, 2015 13:20
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xaprb/7f00a77e89b87ce205ed to your computer and use it in GitHub Desktop.
Save xaprb/7f00a77e89b87ce205ed to your computer and use it in GitHub Desktop.
lowercase_string.go
package main
import (
"database/sql"
"database/sql/driver"
"errors"
_ "github.com/go-sql-driver/mysql"
"log"
"strings"
)
type LowercaseString string
// Implements driver.Valuer.
func (ls LowercaseString) Value() (driver.Value, error) {
return driver.Value(strings.ToLower(string(ls))), nil
}
// Implements sql.Scanner. Simplistic -- only handles string and []byte
func (ls *LowercaseString) Scan(src interface{}) error {
var source string
switch src.(type) {
case string:
source = src.(string)
case []byte:
source = string(src.([]byte))
default:
return errors.New("Incompatible type for LowercaseString")
}
*ls = LowercaseString(strings.ToLower(source))
return nil
}
func main() {
db, err := sql.Open("mysql",
"root:@tcp(:3306)/test")
if err != nil {
log.Fatal(err)
}
defer db.Close()
_, err = db.Exec(
"CREATE TABLE IF NOT EXISTS test.hello(world varchar(50))")
if err != nil {
log.Fatal(err)
}
_, err = db.Exec("DELETE FROM test.hello")
if err != nil {
log.Fatal(err)
}
// Insert a row that's not lowercased, and one that is.
var normalString string = "I AM UPPERCASED NORMAL STRING"
var lcString LowercaseString = "I AM UPPERCASED MAGIC STRING"
_, err = db.Exec("INSERT INTO test.hello VALUES(?), (?)", normalString, lcString)
if err != nil {
log.Fatal(err)
}
rows, err := db.Query("SELECT * FROM test.hello")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var s1 LowercaseString
err = rows.Scan(&s1)
if err != nil {
log.Print(err)
}
log.Print(s1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment