good morning!!!!

Skip to content
Snippets Groups Projects
Commit 169eebe4 authored by José Carlos Nieto's avatar José Carlos Nieto
Browse files

Making some values public for easy initialization and adding sort by multiple columns.

parent 6a2b82e7
No related branches found
No related tags found
No related merge requests found
......@@ -5,11 +5,11 @@ import (
)
type Column struct {
v string
Value string
}
func (self Column) String() string {
chunks := strings.Split(self.v, Layout.ColumnSeparator)
chunks := strings.Split(self.Value, Layout.ColumnSeparator)
for i := range chunks {
chunks[i] = mustParse(Layout.IdentifierQuote, Raw{chunks[i]})
......
......@@ -5,9 +5,9 @@ import (
)
type Database struct {
v string
Value string
}
func (self Database) String() string {
return mustParse(Layout.IdentifierQuote, Raw{fmt.Sprintf(`%v`, self.v)})
return mustParse(Layout.IdentifierQuote, Raw{fmt.Sprintf(`%v`, self.Value)})
}
......@@ -17,9 +17,11 @@ const (
defaultClauseOperator = ` {{.}} `
defaultColumnValue = `{{.Column}} {{.Operator}} {{.Value}}`
defaultSortByColumnLayout = `{{.Column}} {{.Sort}}`
defaultOrderByLayout = `
{{if .Columns}}
ORDER BY {{.Columns}} {{.Sort}}
{{if .SortColumns}}
ORDER BY {{.SortColumns}}
{{end}}
`
......@@ -76,6 +78,7 @@ const (
({{.Columns}})
VALUES
({{.Values}})
{{.Extra}}
`
defaultTruncateLayout = `
......
......@@ -15,6 +15,7 @@ type layout struct {
ClauseGroup string
ClauseOperator string
ColumnValue string
SortByColumnLayout string
WhereLayout string
OrderByLayout string
InsertLayout string
......@@ -42,6 +43,7 @@ var Layout = layout{
defaultClauseGroup,
defaultClauseOperator,
defaultColumnValue,
defaultSortByColumnLayout,
defaultWhereLayout,
defaultOrderByLayout,
defaultInsertLayout,
......
......@@ -21,6 +21,7 @@ const (
type (
Limit int
Offset int
Extra string
)
func mustParse(text string, data interface{}) string {
......@@ -45,6 +46,7 @@ type Statement struct {
Values
ColumnValues
OrderBy
Extra
Where
}
......
......@@ -228,8 +228,8 @@ func TestSelectFieldsFromWithOrderBy(t *testing.T) {
{"baz"},
},
OrderBy: OrderBy{
Columns: Columns{
{"foo"},
SortColumns: SortColumns{
SortColumn{Column: Column{"foo"}},
},
},
Table: Table{"table name"},
......@@ -251,10 +251,9 @@ func TestSelectFieldsFromWithOrderBy(t *testing.T) {
{"baz"},
},
OrderBy: OrderBy{
Columns: Columns{
{"foo"},
SortColumns{
SortColumn{Column{"foo"}, Sort{SqlSortAsc}},
},
Sort: Sort{SqlSortAsc},
},
Table: Table{"table name"},
}
......@@ -275,10 +274,9 @@ func TestSelectFieldsFromWithOrderBy(t *testing.T) {
{"baz"},
},
OrderBy: OrderBy{
Columns: Columns{
{"foo"},
SortColumns{
{Column{"foo"}, Sort{SqlSortDesc}},
},
Sort: Sort{SqlSortDesc},
},
Table: Table{"table name"},
}
......@@ -289,6 +287,31 @@ func TestSelectFieldsFromWithOrderBy(t *testing.T) {
if s != e {
t.Fatalf("Got: %s, Expecting: %s", s, e)
}
// ORDER BY many fields
stmt = Statement{
Type: SqlSelect,
Columns: Columns{
{"foo"},
{"bar"},
{"baz"},
},
OrderBy: OrderBy{
SortColumns{
{Column{"foo"}, Sort{SqlSortDesc}},
{Column{"bar"}, Sort{SqlSortAsc}},
{Column{"baz"}, Sort{SqlSortDesc}},
},
},
Table: Table{"table name"},
}
s = trim(stmt.Compile())
e = `SELECT "foo", "bar", "baz" FROM "table name" ORDER BY "foo" DESC, "bar" ASC, "baz" DESC`
if s != e {
t.Fatalf("Got: %s, Expecting: %s", s, e)
}
}
func TestSelectFieldsFromWhere(t *testing.T) {
......
package sqlgen
type OrderBy struct {
Columns
import "strings"
type SortColumn struct {
Column
Sort
}
type SortColumns []SortColumn
func (self SortColumns) String() string {
l := len(self)
s := make([]string, 0, l)
for i := 0; i < l; i++ {
s = append(s, self[i].String())
}
return strings.Join(s, Layout.IdentifierSeparator)
}
func (self SortColumn) String() string {
return mustParse(Layout.SortByColumnLayout, self)
}
type OrderBy struct {
SortColumns
}
func (self OrderBy) String() string {
if self.Columns.Len() > 0 {
if len(self.SortColumns) > 0 {
return mustParse(Layout.OrderByLayout, self)
}
return ""
......
......@@ -5,9 +5,9 @@ import (
)
type Table struct {
v string
Value string
}
func (self Table) String() string {
return mustParse(Layout.IdentifierQuote, Raw{fmt.Sprintf(`%v`, self.v)})
return mustParse(Layout.IdentifierQuote, Raw{fmt.Sprintf(`%v`, self.Value)})
}
......@@ -8,14 +8,14 @@ import (
type Values []Value
type Value struct {
v interface{}
Value interface{}
}
func (self Value) String() string {
if raw, ok := self.v.(Raw); ok {
if raw, ok := self.Value.(Raw); ok {
return raw.Raw
}
return mustParse(Layout.ValueQuote, Raw{fmt.Sprintf(`%v`, self.v)})
return mustParse(Layout.ValueQuote, Raw{fmt.Sprintf(`%v`, self.Value)})
}
func (self Values) String() string {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment