You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.7 KiB
88 lines
1.7 KiB
package clause |
|
|
|
// Interface clause interface |
|
type Interface interface { |
|
Name() string |
|
Build(Builder) |
|
MergeClause(*Clause) |
|
} |
|
|
|
// ClauseBuilder clause builder, allows to customize how to build clause |
|
type ClauseBuilder func(Clause, Builder) |
|
|
|
type Writer interface { |
|
WriteByte(byte) error |
|
WriteString(string) (int, error) |
|
} |
|
|
|
// Builder builder interface |
|
type Builder interface { |
|
Writer |
|
WriteQuoted(field interface{}) |
|
AddVar(Writer, ...interface{}) |
|
} |
|
|
|
// Clause |
|
type Clause struct { |
|
Name string // WHERE |
|
BeforeExpression Expression |
|
AfterNameExpression Expression |
|
AfterExpression Expression |
|
Expression Expression |
|
Builder ClauseBuilder |
|
} |
|
|
|
// Build build clause |
|
func (c Clause) Build(builder Builder) { |
|
if c.Builder != nil { |
|
c.Builder(c, builder) |
|
} else if c.Expression != nil { |
|
if c.BeforeExpression != nil { |
|
c.BeforeExpression.Build(builder) |
|
builder.WriteByte(' ') |
|
} |
|
|
|
if c.Name != "" { |
|
builder.WriteString(c.Name) |
|
builder.WriteByte(' ') |
|
} |
|
|
|
if c.AfterNameExpression != nil { |
|
c.AfterNameExpression.Build(builder) |
|
builder.WriteByte(' ') |
|
} |
|
|
|
c.Expression.Build(builder) |
|
|
|
if c.AfterExpression != nil { |
|
builder.WriteByte(' ') |
|
c.AfterExpression.Build(builder) |
|
} |
|
} |
|
} |
|
|
|
const ( |
|
PrimaryKey string = "~~~py~~~" // primary key |
|
CurrentTable string = "~~~ct~~~" // current table |
|
Associations string = "~~~as~~~" // associations |
|
) |
|
|
|
var ( |
|
currentTable = Table{Name: CurrentTable} |
|
PrimaryColumn = Column{Table: CurrentTable, Name: PrimaryKey} |
|
) |
|
|
|
// Column quote with name |
|
type Column struct { |
|
Table string |
|
Name string |
|
Alias string |
|
Raw bool |
|
} |
|
|
|
// Table quote with name |
|
type Table struct { |
|
Name string |
|
Alias string |
|
Raw bool |
|
}
|
|
|