Remove methods from Table interface that affects receiver object
Modifying SQL builder receiver object can produce unwanted side effects.
This commit is contained in:
parent
1e511654fd
commit
38776e35ab
3 changed files with 15 additions and 60 deletions
|
|
@ -15,22 +15,27 @@ type Table interface {
|
|||
columns() []Column
|
||||
SchemaName() string
|
||||
TableName() string
|
||||
AS(alias string)
|
||||
Alias() string
|
||||
Schema(schemaName string)
|
||||
}
|
||||
|
||||
// NewTable creates new table with schema Name, table Name and list of columns
|
||||
func NewTable(schemaName, name string, columns ...ColumnExpression) SerializerTable {
|
||||
func NewTable(schemaName, name, alias string, columns ...ColumnExpression) SerializerTable {
|
||||
|
||||
t := tableImpl{
|
||||
schemaName: schemaName,
|
||||
name: name,
|
||||
alias: alias,
|
||||
columnList: columns,
|
||||
}
|
||||
|
||||
columnTableName := name
|
||||
|
||||
if alias != "" {
|
||||
columnTableName = alias
|
||||
}
|
||||
|
||||
for _, c := range columns {
|
||||
c.setTableName(name)
|
||||
c.setTableName(columnTableName)
|
||||
}
|
||||
|
||||
return &t
|
||||
|
|
@ -43,14 +48,6 @@ type tableImpl struct {
|
|||
columnList []ColumnExpression
|
||||
}
|
||||
|
||||
func (t *tableImpl) AS(alias string) {
|
||||
t.alias = alias
|
||||
|
||||
for _, c := range t.columnList {
|
||||
c.setTableName(alias)
|
||||
}
|
||||
}
|
||||
|
||||
func (t *tableImpl) SchemaName() string {
|
||||
return t.schemaName
|
||||
}
|
||||
|
|
@ -73,10 +70,6 @@ func (t *tableImpl) Alias() string {
|
|||
return t.alias
|
||||
}
|
||||
|
||||
func (t *tableImpl) Schema(schemaName string) {
|
||||
t.schemaName = schemaName
|
||||
}
|
||||
|
||||
func (t *tableImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
if t == nil {
|
||||
panic("jet: tableImpl is nil")
|
||||
|
|
@ -163,9 +156,6 @@ func (t *joinTableImpl) Alias() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (t *joinTableImpl) Schema(schemaName string) {
|
||||
}
|
||||
|
||||
func (t *joinTableImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
if t == nil {
|
||||
panic("jet: Join table is nil. ")
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import (
|
|||
)
|
||||
|
||||
func TestNewTable(t *testing.T) {
|
||||
newTable := NewTable("schema", "table", IntegerColumn("intCol"))
|
||||
newTable := NewTable("schema", "table", "", IntegerColumn("intCol"))
|
||||
|
||||
require.Equal(t, newTable.SchemaName(), "schema")
|
||||
require.Equal(t, newTable.TableName(), "table")
|
||||
|
|
@ -16,8 +16,8 @@ func TestNewTable(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewJoinTable(t *testing.T) {
|
||||
newTable1 := NewTable("schema", "table", IntegerColumn("intCol1"))
|
||||
newTable2 := NewTable("schema", "table2", IntegerColumn("intCol2"))
|
||||
newTable1 := NewTable("schema", "table", "", IntegerColumn("intCol1"))
|
||||
newTable2 := NewTable("schema", "table2", "", IntegerColumn("intCol2"))
|
||||
|
||||
joinTable := NewJoinTable(newTable1, newTable2, InnerJoin, IntegerColumn("intCol1").EQ(IntegerColumn("intCol2")))
|
||||
|
||||
|
|
@ -31,38 +31,3 @@ INNER JOIN schema.table2 ON ("intCol1" = "intCol2")`)
|
|||
require.Equal(t, joinTable.columns()[0].Name(), "intCol1")
|
||||
require.Equal(t, joinTable.columns()[1].Name(), "intCol2")
|
||||
}
|
||||
|
||||
func TestSchemaNameSet(t *testing.T) {
|
||||
newTable := NewTable("schema", "table")
|
||||
newTable.Schema("foo")
|
||||
newTable.AS("bar")
|
||||
assertClauseSerialize(t, newTable, `foo.table AS bar`)
|
||||
}
|
||||
|
||||
func TestSchemaNameClear(t *testing.T) {
|
||||
newTable := NewTable("schema", "table")
|
||||
newTable.Schema("")
|
||||
newTable.AS("bar")
|
||||
assertClauseSerialize(t, newTable, `table AS bar`)
|
||||
}
|
||||
|
||||
func TestNewJoinTableSchemaNameSet(t *testing.T) {
|
||||
newTable1 := NewTable("schema", "table", IntegerColumn("intCol1"))
|
||||
newTable2 := NewTable("schema", "table2", IntegerColumn("intCol2"))
|
||||
|
||||
newTable1.Schema("foo")
|
||||
newTable2.Schema("foo")
|
||||
|
||||
joinTable := NewJoinTable(newTable1, newTable2, InnerJoin, IntegerColumn("intCol1").EQ(IntegerColumn("intCol2")))
|
||||
joinTable.Schema("xxx")
|
||||
|
||||
assertClauseSerialize(t, joinTable, `foo.table
|
||||
INNER JOIN foo.table2 ON ("intCol1" = "intCol2")`)
|
||||
|
||||
require.Equal(t, joinTable.SchemaName(), "foo")
|
||||
require.Equal(t, joinTable.TableName(), "")
|
||||
|
||||
require.Equal(t, len(joinTable.columns()), 2)
|
||||
require.Equal(t, joinTable.columns()[0].Name(), "intCol1")
|
||||
require.Equal(t, joinTable.columns()[1].Name(), "intCol2")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ var (
|
|||
table1ColBool = BoolColumn("col_bool")
|
||||
table1ColDate = DateColumn("col_date")
|
||||
)
|
||||
var table1 = NewTable("db", "table1", table1Col1, table1ColInt, table1ColFloat, table1Col3, table1ColTime, table1ColTimez, table1ColBool, table1ColDate, table1ColTimestamp, table1ColTimestampz)
|
||||
var table1 = NewTable("db", "table1", "", table1Col1, table1ColInt, table1ColFloat, table1Col3, table1ColTime, table1ColTimez, table1ColBool, table1ColDate, table1ColTimestamp, table1ColTimestampz)
|
||||
|
||||
var (
|
||||
table2Col3 = IntegerColumn("col3")
|
||||
|
|
@ -41,14 +41,14 @@ var (
|
|||
table2ColTimestampz = TimestampzColumn("col_timestampz")
|
||||
table2ColDate = DateColumn("col_date")
|
||||
)
|
||||
var table2 = NewTable("db", "table2", table2Col3, table2Col4, table2ColInt, table2ColFloat, table2ColStr, table2ColBool, table2ColTime, table2ColTimez, table2ColDate, table2ColTimestamp, table2ColTimestampz)
|
||||
var table2 = NewTable("db", "table2", "", table2Col3, table2Col4, table2ColInt, table2ColFloat, table2ColStr, table2ColBool, table2ColTime, table2ColTimez, table2ColDate, table2ColTimestamp, table2ColTimestampz)
|
||||
|
||||
var (
|
||||
table3Col1 = IntegerColumn("col1")
|
||||
table3ColInt = IntegerColumn("col_int")
|
||||
table3StrCol = StringColumn("col2")
|
||||
)
|
||||
var table3 = NewTable("db", "table3", table3Col1, table3ColInt, table3StrCol)
|
||||
var table3 = NewTable("db", "table3", "", table3Col1, table3ColInt, table3StrCol)
|
||||
|
||||
func assertClauseSerialize(t *testing.T, clause Serializer, query string, args ...interface{}) {
|
||||
out := SQLBuilder{Dialect: defaultDialect}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue