Add support for INSERT statements.

This commit is contained in:
zer0sub 2019-04-07 09:58:12 +02:00
parent d84deb8745
commit 599a8c537a
15 changed files with 586 additions and 277 deletions

View file

@ -1,52 +1,17 @@
package tests
import (
"database/sql"
"fmt"
"github.com/sub0Zero/go-sqlbuilder/generator"
"github.com/sub0Zero/go-sqlbuilder/sqlbuilder"
"github.com/sub0Zero/go-sqlbuilder/tests/.test_files/dvd_rental/dvds/model"
. "github.com/sub0Zero/go-sqlbuilder/tests/.test_files/dvd_rental/dvds/table"
"gotest.tools/assert"
"os"
"strings"
"testing"
"time"
)
const (
folderPath = ".test_files/"
host = "localhost"
port = 5432
user = "postgres"
password = "postgres"
dbname = "dvd_rental"
schemaName = "dvds"
)
var connectString = fmt.Sprintf("host=%s port=%d user=%s "+"password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)
var db *sql.DB
//go:generate generator -db "host=localhost port=5432 user=postgres password=postgres dbname=dvd_rental sslmode=disable" -dbName dvd_rental -schema dvds -path .test_files
//go:generate generator -db "host=localhost port=5432 user=postgres password=postgres dbname=dvd_rental sslmode=disable" -dbName dvd_rental -schema test_sample -path .test_files
func TestMain(m *testing.M) {
fmt.Println("Begin")
var err error
db, err = sql.Open("postgres", connectString)
if err != nil {
panic("Failed to connect to test db")
}
defer db.Close()
ret := m.Run()
db.Close()
fmt.Println("END")
os.Exit(ret)
}
func TestGenerateModel(t *testing.T) {
err := generator.Generate(folderPath, connectString, dbname, schemaName)

79
tests/insert_test.go Normal file
View file

@ -0,0 +1,79 @@
package tests
import (
"fmt"
"github.com/sub0Zero/go-sqlbuilder/tests/.test_files/dvd_rental/test_sample/model"
"github.com/sub0Zero/go-sqlbuilder/tests/.test_files/dvd_rental/test_sample/table"
"gotest.tools/assert"
"testing"
)
func TestInsertValues(t *testing.T) {
insertQuery := table.Link.INSERT(table.Link.URL, table.Link.Name).
VALUES("http://www.postgresqltutorial.com", "PostgreSQL Tutorial").
VALUES("http://www.google.com", "Google").
VALUES("http://www.yahoo.com", "Yahoo").
VALUES("http://www.bing.com", "Bing").
RETURNING(table.Link.ID)
insertQueryStr, err := insertQuery.String()
assert.NilError(t, err)
fmt.Println(insertQueryStr)
assert.Equal(t, insertQueryStr, `INSERT INTO test_sample.link (url,name) VALUES ('http://www.postgresqltutorial.com','PostgreSQL Tutorial'), ('http://www.google.com','Google'), ('http://www.yahoo.com','Yahoo'), ('http://www.bing.com','Bing') RETURNING link.id;`)
res, err := insertQuery.Execute(db)
assert.NilError(t, err)
rowsAffected, err := res.RowsAffected()
assert.NilError(t, err)
assert.Equal(t, rowsAffected, int64(4))
link := []model.Link{}
err = table.Link.SELECT(table.Link.AllColumns).Execute(db, &link)
assert.NilError(t, err)
assert.Equal(t, len(link), 4)
assert.DeepEqual(t, link[0], model.Link{
ID: 1,
URL: "http://www.postgresqltutorial.com",
Name: "PostgreSQL Tutorial",
Rel: nil,
})
assert.DeepEqual(t, link[3], model.Link{
ID: 4,
URL: "http://www.bing.com",
Name: "Bing",
Rel: nil,
})
}
func TestInsertDataObject(t *testing.T) {
linkData := model.Link{
URL: "http://www.duckduckgo.com",
Name: "Duck Duck go",
Rel: nil,
}
query := table.Link.INSERT(table.Link.URL, table.Link.Name).
VALUES_MAPPING(linkData)
queryStr, err := query.String()
assert.NilError(t, err)
fmt.Println(queryStr)
result, err := query.Execute(db)
assert.NilError(t, err)
fmt.Println(result)
}

75
tests/main_test.go Normal file
View file

@ -0,0 +1,75 @@
package tests
import (
"database/sql"
"fmt"
"os"
"testing"
)
const (
folderPath = ".test_files/"
host = "localhost"
port = 5432
user = "postgres"
password = "postgres"
dbname = "dvd_rental"
schemaName = "dvds"
)
var connectString = fmt.Sprintf("host=%s port=%d user=%s "+"password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)
var db *sql.DB
var tx *sql.Tx
//go:generate generator -db "host=localhost port=5432 user=postgres password=postgres dbname=dvd_rental sslmode=disable" -dbName dvd_rental -schema dvds -path .test_files
//go:generate generator -db "host=localhost port=5432 user=postgres password=postgres dbname=dvd_rental sslmode=disable" -dbName dvd_rental -schema test_sample -path .test_files
func TestMain(m *testing.M) {
fmt.Println("Begin")
var err error
db, err = sql.Open("postgres", connectString)
if err != nil {
panic("Failed to connect to test db")
}
tx, _ = db.Begin()
defer cleanUp()
dbInit()
ret := m.Run()
cleanUp()
fmt.Println("END")
os.Exit(ret)
}
func cleanUp() {
fmt.Println("CLEAN UP")
tx.Rollback()
db.Close()
}
func dbInit() {
linkTableCreate := `
DROP TABLE IF EXISTS test_sample.link;
CREATE TABLE IF NOT EXISTS test_sample.link (
ID serial PRIMARY KEY,
url VARCHAR (255) NOT NULL,
name VARCHAR (255) NOT NULL,
description VARCHAR (255),
rel VARCHAR (50)
);`
result, err := db.Exec(linkTableCreate)
if err != nil {
panic(err)
}
fmt.Println(result)
}