From 85b21deebb1761a1afb13ab7975c32328648db3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Carlos=20Nieto?= <jose.carlos@menteslibres.net> Date: Sat, 7 Jun 2014 14:21:45 -0500 Subject: [PATCH] Testing insert. --- util/sqlgen/main.go | 17 ++++++- util/sqlgen/main_test.go | 95 +++++++++++++++++++++++++++++++++++++++ util/sqlgen/value.go | 19 ++++++++ util/sqlgen/value_test.go | 17 +++++++ 4 files changed, 147 insertions(+), 1 deletion(-) diff --git a/util/sqlgen/main.go b/util/sqlgen/main.go index c7144463..f8ed4017 100644 --- a/util/sqlgen/main.go +++ b/util/sqlgen/main.go @@ -9,6 +9,7 @@ import ( const ( sqlColumnSeparator = `.` sqlColumnComma = `, ` + sqlValueComma = `, ` sqlEscape = `"{{.Raw}}"` sqlOrderByLayout = ` @@ -45,7 +46,10 @@ const ( sqlUpdateLayout = ` UPDATE {{.Source}} - SET {{.FieldValues}} + SET {{.ColumnValues}} + {{if .Where}} + WHERE {{.Where}} + {{end}} ` sqlSelectCountLayout = ` @@ -97,7 +101,10 @@ const ( SqlDropTable SqlDropDatabase SqlSelectCount + SqlInsert SqlSelect + SqlUpdate + SqlDelete ) type ( @@ -125,6 +132,8 @@ type Statement struct { Limit Offset Columns + Values + ColumnValues OrderBy Where } @@ -141,6 +150,12 @@ func (self *Statement) Compile() string { return mustParse(sqlSelectCountLayout, self) case SqlSelect: return mustParse(sqlSelectLayout, self) + case SqlDelete: + return mustParse(sqlDeleteLayout, self) + case SqlUpdate: + return mustParse(sqlUpdateLayout, self) + case SqlInsert: + return mustParse(sqlInsertLayout, self) } return "" } diff --git a/util/sqlgen/main_test.go b/util/sqlgen/main_test.go index 67eed3d7..43d3ef68 100644 --- a/util/sqlgen/main_test.go +++ b/util/sqlgen/main_test.go @@ -339,3 +339,98 @@ func TestSelectFieldsFromWhereLimitOffset(t *testing.T) { t.Fatalf("Got: %s, Expecting: %s", s, e) } } + +func TestDelete(t *testing.T) { + var s, e string + var stmt Statement + + stmt = Statement{ + Type: SqlDelete, + Source: Source{"source name"}, + Where: Where{ + ColumnValue{Column{"baz"}, "=", Value{99}}, + }, + } + + s = trim(stmt.Compile()) + e = `DELETE FROM "source name" WHERE ("baz" = "99")` + + if s != e { + t.Fatalf("Got: %s, Expecting: %s", s, e) + } +} + +func TestUpdate(t *testing.T) { + var s, e string + var stmt Statement + + stmt = Statement{ + Type: SqlUpdate, + Source: Source{"source name"}, + ColumnValues: ColumnValues{ + []ColumnValue{ + {Column{"foo"}, "=", Value{76}}, + }, + }, + Where: Where{ + ColumnValue{Column{"baz"}, "=", Value{99}}, + }, + } + + s = trim(stmt.Compile()) + e = `UPDATE "source name" SET "foo" = "76" WHERE ("baz" = "99")` + + if s != e { + t.Fatalf("Got: %s, Expecting: %s", s, e) + } + + stmt = Statement{ + Type: SqlUpdate, + Source: Source{"source name"}, + ColumnValues: ColumnValues{ + []ColumnValue{ + {Column{"foo"}, "=", Value{76}}, + {Column{"bar"}, "=", Value{Raw{"88"}}}, + }, + }, + Where: Where{ + ColumnValue{Column{"baz"}, "=", Value{99}}, + }, + } + + s = trim(stmt.Compile()) + e = `UPDATE "source name" SET "foo" = "76", "bar" = 88 WHERE ("baz" = "99")` + + if s != e { + t.Fatalf("Got: %s, Expecting: %s", s, e) + } +} + +func TestInsert(t *testing.T) { + var s, e string + var stmt Statement + + stmt = Statement{ + Type: SqlInsert, + Source: Source{"source name"}, + Columns: Columns{ + []Column{ + Column{"foo"}, + Column{"bar"}, + Column{"baz"}, + }, + }, + Values: Values{ + Value{"1"}, + Value{2}, + Value{Raw{"3"}}, + }, + } + + s = trim(stmt.Compile()) + e = `INSERT INTO "source name" ("foo", "bar", "baz") VALUES ("1", "2", 3)` + + if s != e { + t.Fatalf("Got: %s, Expecting: %s", s, e) + } +} diff --git a/util/sqlgen/value.go b/util/sqlgen/value.go index a3aa665a..11be7586 100644 --- a/util/sqlgen/value.go +++ b/util/sqlgen/value.go @@ -2,8 +2,11 @@ package sqlgen import ( "fmt" + "strings" ) +type Values []Value + type Value struct { v interface{} } @@ -15,3 +18,19 @@ func (self Value) String() string { return mustParse(sqlEscape, Raw{fmt.Sprintf(`%v`, self.v)}) } + +func (self Values) String() string { + l := len(self) + + if l > 0 { + chunks := make([]string, 0, l) + + for i := 0; i < l; i++ { + chunks = append(chunks, self[i].String()) + } + + return strings.Join(chunks, sqlValueComma) + } + + return "" +} diff --git a/util/sqlgen/value_test.go b/util/sqlgen/value_test.go index f7d02827..525e7eb0 100644 --- a/util/sqlgen/value_test.go +++ b/util/sqlgen/value_test.go @@ -25,5 +25,22 @@ func TestValue(t *testing.T) { if s != e { t.Fatalf("Got: %s, Expecting: %s", s, e) } +} + +func TestValues(t *testing.T) { + var s, e string + var val Values + + val = Values{ + Value{Raw{"1"}}, + Value{Raw{"2"}}, + Value{"3"}, + } + s = val.String() + e = `1, 2, "3"` + + if s != e { + t.Fatalf("Got: %s, Expecting: %s", s, e) + } } -- GitLab