mydb/internal/sqlbuilder/template_test.go

193 lines
4.5 KiB
Go
Raw Permalink Normal View History

2023-09-18 15:15:42 +08:00
package sqlbuilder
import (
"git.hexq.cn/tiglog/mydb/internal/cache"
"git.hexq.cn/tiglog/mydb/internal/sqladapter/exql"
)
const (
defaultColumnSeparator = `.`
defaultIdentifierSeparator = `, `
defaultIdentifierQuote = `"{{.Value}}"`
defaultValueSeparator = `, `
defaultValueQuote = `'{{.}}'`
defaultAndKeyword = `AND`
defaultOrKeyword = `OR`
defaultDescKeyword = `DESC`
defaultAscKeyword = `ASC`
defaultAssignmentOperator = `=`
defaultClauseGroup = `({{.}})`
defaultClauseOperator = ` {{.}} `
defaultColumnValue = `{{.Column}} {{.Operator}} {{.Value}}`
defaultTableAliasLayout = `{{.Name}}{{if .Alias}} AS {{.Alias}}{{end}}`
defaultColumnAliasLayout = `{{.Name}}{{if .Alias}} AS {{.Alias}}{{end}}`
defaultSortByColumnLayout = `{{.Column}} {{.Order}}`
defaultOrderByLayout = `
{{if .SortColumns}}
ORDER BY {{.SortColumns}}
{{end}}
`
defaultWhereLayout = `
{{if .Conds}}
WHERE {{.Conds}}
{{end}}
`
defaultUsingLayout = `
{{if .Columns}}
USING ({{.Columns}})
{{end}}
`
defaultJoinLayout = `
{{if .Table}}
{{ if .On }}
{{.Type}} JOIN {{.Table}}
{{.On}}
{{ else if .Using }}
{{.Type}} JOIN {{.Table}}
{{.Using}}
{{ else if .Type | eq "CROSS" }}
{{.Type}} JOIN {{.Table}}
{{else}}
NATURAL {{.Type}} JOIN {{.Table}}
{{end}}
{{end}}
`
defaultOnLayout = `
{{if .Conds}}
ON {{.Conds}}
{{end}}
`
defaultSelectLayout = `
SELECT
{{if .Distinct}}
DISTINCT
{{end}}
{{if defined .Columns}}
{{.Columns | compile}}
{{else}}
*
{{end}}
{{if defined .Table}}
FROM {{.Table | compile}}
{{end}}
{{.Joins | compile}}
{{.Where | compile}}
{{if defined .GroupBy}}
{{.GroupBy | compile}}
{{end}}
{{.OrderBy | compile}}
{{if .Limit}}
LIMIT {{.Limit}}
{{end}}
{{if .Offset}}
OFFSET {{.Offset}}
{{end}}
`
defaultDeleteLayout = `
DELETE
FROM {{.Table | compile}}
{{.Where | compile}}
`
defaultUpdateLayout = `
UPDATE
{{.Table | compile}}
SET {{.ColumnValues | compile}}
{{.Where | compile}}
`
defaultCountLayout = `
SELECT
COUNT(1) AS _t
FROM {{.Table | compile}}
{{.Where | compile}}
{{if .Limit}}
LIMIT {{.Limit}}
{{end}}
{{if .Offset}}
OFFSET {{.Offset}}
{{end}}
`
defaultInsertLayout = `
INSERT INTO {{.Table | compile}}
{{if defined .Columns }}({{.Columns | compile}}){{end}}
VALUES
{{if defined .Values}}
{{.Values | compile}}
{{else}}
(default)
{{end}}
{{if defined .Returning}}
RETURNING {{.Returning | compile}}
{{end}}
`
defaultTruncateLayout = `
TRUNCATE TABLE {{.Table | compile}}
`
defaultDropDatabaseLayout = `
DROP DATABASE {{.Database | compile}}
`
defaultDropTableLayout = `
DROP TABLE {{.Table | compile}}
`
defaultGroupByLayout = `
{{if .GroupColumns}}
GROUP BY {{.GroupColumns}}
{{end}}
`
)
var testTemplate = exql.Template{
ColumnSeparator: defaultColumnSeparator,
IdentifierSeparator: defaultIdentifierSeparator,
IdentifierQuote: defaultIdentifierQuote,
ValueSeparator: defaultValueSeparator,
ValueQuote: defaultValueQuote,
AndKeyword: defaultAndKeyword,
OrKeyword: defaultOrKeyword,
DescKeyword: defaultDescKeyword,
AscKeyword: defaultAscKeyword,
AssignmentOperator: defaultAssignmentOperator,
ClauseGroup: defaultClauseGroup,
ClauseOperator: defaultClauseOperator,
ColumnValue: defaultColumnValue,
TableAliasLayout: defaultTableAliasLayout,
ColumnAliasLayout: defaultColumnAliasLayout,
SortByColumnLayout: defaultSortByColumnLayout,
WhereLayout: defaultWhereLayout,
OnLayout: defaultOnLayout,
UsingLayout: defaultUsingLayout,
JoinLayout: defaultJoinLayout,
OrderByLayout: defaultOrderByLayout,
InsertLayout: defaultInsertLayout,
SelectLayout: defaultSelectLayout,
UpdateLayout: defaultUpdateLayout,
DeleteLayout: defaultDeleteLayout,
TruncateLayout: defaultTruncateLayout,
DropDatabaseLayout: defaultDropDatabaseLayout,
DropTableLayout: defaultDropTableLayout,
CountLayout: defaultCountLayout,
GroupByLayout: defaultGroupByLayout,
Cache: cache.NewCache(),
}