Skip to content

Golang Database Statement Mapper for managing multiple prepared statements.

License

Notifications You must be signed in to change notification settings

PurpleSec/Mapper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mapper

Golang Database Statement Mapper for managing multiple prepared statements.

Mapper is a Go package that allows for mapping multiple prepared SQL statements with name "keys". This can be used to manage resources and close all statements when your program closes.

Using Mapper is easy.

Taken from "examples/example.go"

package main

import (
    "database/sql"
    "fmt"

    "github.com/PurpleSec/mapper"

    _ "github.com/mattn/go-sqlite3"
)

func main() {
    db, err := sql.Open("sqlite3", ":memory:")
    if err != nil {
        panic(err)
    }

    m := &mapper.Map{Database: db}
    defer m.Close()

    err = m.Add(
        "create_table",
            `CREATE TABLE IF NOT EXISTS Testing1 (
            TestID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
            TestName VARCHAR(64) NOT NULL UNIQUE
        )`,
    )
    if err != nil {
        panic(err)
    }

    if _, err := m.Exec("create_table"); err != nil {
        panic(err)
    }

    err = m.Extend(
        map[string]string{
            "insert": "INSERT INTO Testing1(TestName) VALUES(?)",
            "select": "SELECT TestName FROM Testing1 WHERE TestID = ?",
        },
    )
    if err != nil {
        panic(err)
    }

    r, err := m.Exec("insert", "Hello World :D!")
    if err != nil {
        panic(err)
    }

    a, err := r.RowsAffected()
    if err != nil {
        panic(err)
    }
    fmt.Printf("Rows Affected: %d\n", a)

    q, err := m.Query("select", 1)
    if err != nil {
        panic(err)
    }

    var s string
    q.Next()
    if err := q.Scan(&s); err != nil {
        panic(err)
    }

    fmt.Printf("got %q\n", s)
    q.Close()
}

ko-fi