Add support for INSERT statements.
This commit is contained in:
parent
d84deb8745
commit
599a8c537a
15 changed files with 586 additions and 277 deletions
125
sqlbuilder/insert_statement_test.go
Normal file
125
sqlbuilder/insert_statement_test.go
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
package sqlbuilder
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gotest.tools/assert"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestInsertNoColumn(t *testing.T) {
|
||||
_, err := table1.INSERT().VALUES().String()
|
||||
|
||||
assert.Assert(t, err != nil)
|
||||
}
|
||||
|
||||
func TestInsertNoRow(t *testing.T) {
|
||||
_, err := table1.INSERT(table1Col1).String()
|
||||
|
||||
assert.Assert(t, err != nil)
|
||||
}
|
||||
|
||||
func TestInsertColumnLengthMismatch(t *testing.T) {
|
||||
_, err := table1.INSERT(table1Col1, table1Col2).VALUES(nil).String()
|
||||
|
||||
fmt.Println(err)
|
||||
assert.Assert(t, err != nil)
|
||||
}
|
||||
|
||||
func TestInsertNilValue(t *testing.T) {
|
||||
_, err := table1.INSERT(table1Col1).VALUES(nil).String()
|
||||
|
||||
assert.Assert(t, err != nil)
|
||||
}
|
||||
|
||||
func TestInsertNilColumn(t *testing.T) {
|
||||
_, err := table1.INSERT(nil).VALUES(1).String()
|
||||
|
||||
assert.Assert(t, err != nil)
|
||||
}
|
||||
|
||||
func TestInsertSingleValue(t *testing.T) {
|
||||
sql, err := table1.INSERT(table1Col1).VALUES(1).String()
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, sql, "INSERT INTO db.table1 (col1) VALUES (1)")
|
||||
}
|
||||
|
||||
func TestInsertDate(t *testing.T) {
|
||||
date := time.Date(1999, 1, 2, 3, 4, 5, 0, time.UTC)
|
||||
|
||||
sql, err := table1.INSERT(table1Col4).VALUES(date).String()
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, sql, "INSERT INTO db.table1 (col4) "+
|
||||
"VALUES ('1999-01-02 03:04:05.000000')")
|
||||
}
|
||||
|
||||
func TestInsertMultipleValues(t *testing.T) {
|
||||
stmt := table1.INSERT(table1Col1, table1Col2, table1Col3)
|
||||
stmt.VALUES(1, 2, 3)
|
||||
|
||||
sql, err := stmt.String()
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, sql, "INSERT INTO db.table1 "+
|
||||
"(col1,col2,col3) "+
|
||||
"VALUES (1,2,3)")
|
||||
}
|
||||
|
||||
func TestInsertMultipleRows(t *testing.T) {
|
||||
stmt := table1.INSERT(table1Col1, table1Col2).
|
||||
VALUES(1, 2).
|
||||
VALUES(11, 22).
|
||||
VALUES(111, 222)
|
||||
|
||||
sql, err := stmt.String()
|
||||
assert.NilError(t, err)
|
||||
|
||||
assert.Equal(t, sql, "INSERT INTO db.table1 "+
|
||||
"(col1,col2) "+
|
||||
"VALUES (1,2), (11,22), (111,222)")
|
||||
}
|
||||
|
||||
func TestInsertValuesFromModel(t *testing.T) {
|
||||
type Table1Model struct {
|
||||
Col1 int
|
||||
Col2 string
|
||||
}
|
||||
|
||||
toInsert := Table1Model{
|
||||
Col1: 1,
|
||||
Col2: "one",
|
||||
}
|
||||
|
||||
stmt := table1.INSERT(table1Col1, table1Col2).
|
||||
VALUES_MAPPING(toInsert)
|
||||
|
||||
sql, err := stmt.String()
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
||||
fmt.Println(sql)
|
||||
|
||||
assert.Equal(t, sql, `INSERT INTO db.table1 (col1,col2) VALUES (1,'one')`)
|
||||
}
|
||||
|
||||
func TestInsertValuesFromModelColumnMismatch(t *testing.T) {
|
||||
type Table1Model struct {
|
||||
Col1Prim int
|
||||
Col2 string
|
||||
}
|
||||
|
||||
toInsert := Table1Model{
|
||||
Col1Prim: 1,
|
||||
Col2: "one",
|
||||
}
|
||||
|
||||
stmt := table1.INSERT(table1Col1, table1Col2).
|
||||
VALUES_MAPPING(toInsert)
|
||||
|
||||
_, err := stmt.String()
|
||||
|
||||
fmt.Println(err)
|
||||
assert.Assert(t, err != nil)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue