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.
go-library/vendor/github.com/upper/db/v4/internal/sqladapter/exql/table.go

95 lines
1.9 KiB

package exql
import (
"strings"
)
type tableT struct {
Name string
Alias string
}
// Table struct represents a SQL table.
type Table struct {
Name interface{}
hash hash
}
var _ = Fragment(&Table{})
func quotedTableName(layout *Template, input string) string {
input = trimString(input)
// chunks := reAliasSeparator.Split(input, 2)
chunks := separateByAS(input)
if len(chunks) == 1 {
// chunks = reSpaceSeparator.Split(input, 2)
chunks = separateBySpace(input)
}
name := chunks[0]
nameChunks := strings.SplitN(name, layout.ColumnSeparator, 2)
for i := range nameChunks {
// nameChunks[i] = strings.TrimSpace(nameChunks[i])
nameChunks[i] = trimString(nameChunks[i])
nameChunks[i] = layout.MustCompile(layout.IdentifierQuote, Raw{Value: nameChunks[i]})
}
name = strings.Join(nameChunks, layout.ColumnSeparator)
var alias string
if len(chunks) > 1 {
// alias = strings.TrimSpace(chunks[1])
alias = trimString(chunks[1])
alias = layout.MustCompile(layout.IdentifierQuote, Raw{Value: alias})
}
return layout.MustCompile(layout.TableAliasLayout, tableT{name, alias})
}
// TableWithName creates an returns a Table with the given name.
func TableWithName(name string) *Table {
return &Table{Name: name}
}
// Hash returns a string hash of the table value.
func (t *Table) Hash() string {
return t.hash.Hash(t)
}
// Compile transforms a table struct into a SQL chunk.
func (t *Table) Compile(layout *Template) (compiled string, err error) {
if z, ok := layout.Read(t); ok {
return z, nil
}
switch value := t.Name.(type) {
case string:
if t.Name == "" {
return
}
// Splitting tables by a comma
parts := separateByComma(value)
l := len(parts)
for i := 0; i < l; i++ {
parts[i] = quotedTableName(layout, parts[i])
}
compiled = strings.Join(parts, layout.IdentifierSeparator)
case Raw:
compiled = value.String()
}
layout.Write(t, compiled)
return
}