diff --git a/util/sqlgen/column.go b/util/sqlgen/column.go index d529b5ca639efb62f4eafbe2e209a78c6570a47e..282fe579bd6e236df8418471e1a424e34b972c7e 100644 --- a/util/sqlgen/column.go +++ b/util/sqlgen/column.go @@ -9,11 +9,11 @@ type Column struct { } func (self Column) String() string { - chunks := strings.Split(self.v, sqlColumnSeparator) + chunks := strings.Split(self.v, Layout.ColumnSeparator) for i := range chunks { - chunks[i] = mustParse(sqlIdentifierQuote, Raw{chunks[i]}) + chunks[i] = mustParse(Layout.IdentifierQuote, Raw{chunks[i]}) } - return strings.Join(chunks, sqlColumnSeparator) + return strings.Join(chunks, Layout.ColumnSeparator) } diff --git a/util/sqlgen/column_value.go b/util/sqlgen/column_value.go index 4a18a2912a023c385e2c9fec31f399e8105cdb6b..a94217528db019cb0a7b0149885e9e3cb748bdc3 100644 --- a/util/sqlgen/column_value.go +++ b/util/sqlgen/column_value.go @@ -11,7 +11,7 @@ type ColumnValue struct { } func (self ColumnValue) String() string { - return mustParse(sqlColumnValue, self) + return mustParse(Layout.ColumnValue, self) } type ColumnValues []ColumnValue @@ -25,5 +25,5 @@ func (self ColumnValues) String() string { out[i] = self[i].String() } - return strings.Join(out, sqlIdentifierSeparator) + return strings.Join(out, Layout.IdentifierSeparator) } diff --git a/util/sqlgen/columns.go b/util/sqlgen/columns.go index a661b6a006a711bdd3a741370a4baa61ce1101b3..fc076b81dd7d2cf7f11e88b376c6e6fcadf4a741 100644 --- a/util/sqlgen/columns.go +++ b/util/sqlgen/columns.go @@ -16,7 +16,7 @@ func (self Columns) String() string { out[i] = self[i].String() } - return strings.Join(out, sqlIdentifierSeparator) + return strings.Join(out, Layout.IdentifierSeparator) } return "" } diff --git a/util/sqlgen/database.go b/util/sqlgen/database.go index 8ea234fe676a90d8f7e6f27bd0caacc372b24a7c..6d77c9555f12acdefbc69800248c6b92d59c5e35 100644 --- a/util/sqlgen/database.go +++ b/util/sqlgen/database.go @@ -9,5 +9,5 @@ type Database struct { } func (self Database) String() string { - return mustParse(sqlIdentifierQuote, Raw{fmt.Sprintf(`%v`, self.v)}) + return mustParse(Layout.IdentifierQuote, Raw{fmt.Sprintf(`%v`, self.v)}) } diff --git a/util/sqlgen/default.go b/util/sqlgen/default.go new file mode 100644 index 0000000000000000000000000000000000000000..baf78211da316677ae1ad7fc21e1739abe1c23a9 --- /dev/null +++ b/util/sqlgen/default.go @@ -0,0 +1,92 @@ +package sqlgen + +const ( + defaultColumnSeparator = `.` + defaultIdentifierSeparator = `, ` + defaultIdentifierQuote = `"{{.Raw}}"` + defaultValueSeparator = `, ` + defaultValueQuote = `'{{.}}'` + + defaultAndKeyword = `AND` + defaultOrKeyword = `OR` + defaultNotKeyword = `NOT` + defaultDescKeyword = `DESC` + defaultAscKeyword = `ASC` + defaultDefaultOperator = `=` + defaultClauseGroup = `({{.}})` + defaultClauseOperator = ` {{.}} ` + defaultColumnValue = `{{.Column}} {{.Operator}} {{.Value}}` + + defaultOrderByLayout = ` + {{if .Columns}} + ORDER BY {{.Columns}} {{.Sort}} + {{end}} + ` + + defaultWhereLayout = ` + {{if .Conds}} + WHERE {{.Conds}} + {{end}} + ` + + defaultSelectLayout = ` + SELECT + + {{if .Columns}} + {{.Columns}} + {{else}} + * + {{end}} + + FROM {{.Table}} + + {{.Where}} + + {{.OrderBy}} + + {{if .Limit}} + LIMIT {{.Limit}} + {{end}} + + {{if .Offset}} + OFFSET {{.Offset}} + {{end}} + ` + defaultDeleteLayout = ` + DELETE + FROM {{.Table}} + {{.Where}} + ` + defaultUpdateLayout = ` + UPDATE + {{.Table}} + SET {{.ColumnValues}} + {{ .Where }} + ` + + defaultSelectCountLayout = ` + SELECT + COUNT(1) AS _t + FROM {{.Table}} + {{.Where}} + ` + + defaultInsertLayout = ` + INSERT INTO {{.Table}} + ({{.Columns}}) + VALUES + ({{.Values}}) + ` + + defaultTruncateLayout = ` + TRUNCATE TABLE {{.Table}} + ` + + defaultDropDatabaseLayout = ` + DROP DATABASE {{.Database}} + ` + + defaultDropTableLayout = ` + DROP TABLE {{.Table}} + ` +) diff --git a/util/sqlgen/layout.go b/util/sqlgen/layout.go new file mode 100644 index 0000000000000000000000000000000000000000..9e928191055ffb26489f9d7519c64fb60ae1db1d --- /dev/null +++ b/util/sqlgen/layout.go @@ -0,0 +1,55 @@ +package sqlgen + +type layout struct { + ColumnSeparator string + IdentifierSeparator string + IdentifierQuote string + ValueSeparator string + ValueQuote string + AndKeyword string + OrKeyword string + NotKeyword string + DescKeyword string + AscKeyword string + DefaultOperator string + ClauseGroup string + ClauseOperator string + ColumnValue string + WhereLayout string + OrderByLayout string + InsertLayout string + SelectLayout string + UpdateLayout string + DeleteLayout string + TruncateLayout string + DropDatabaseLayout string + DropTableLayout string + SelectCountLayout string +} + +var Layout = layout{ + defaultColumnSeparator, + defaultIdentifierSeparator, + defaultIdentifierQuote, + defaultValueSeparator, + defaultValueQuote, + defaultAndKeyword, + defaultOrKeyword, + defaultNotKeyword, + defaultDescKeyword, + defaultAscKeyword, + defaultDefaultOperator, + defaultClauseGroup, + defaultClauseOperator, + defaultColumnValue, + defaultWhereLayout, + defaultOrderByLayout, + defaultInsertLayout, + defaultSelectLayout, + defaultUpdateLayout, + defaultDeleteLayout, + defaultTruncateLayout, + defaultDropDatabaseLayout, + defaultDropTableLayout, + defaultSelectCountLayout, +} diff --git a/util/sqlgen/main.go b/util/sqlgen/main.go index 7076931372854f23efb1ecb426c8b8569a721956..fabdf6ff1a0c8eb3e0ddd91ac178f05b9063069d 100644 --- a/util/sqlgen/main.go +++ b/util/sqlgen/main.go @@ -5,97 +5,6 @@ import ( "text/template" ) -const ( - sqlColumnSeparator = `.` - sqlIdentifierSeparator = `, ` - sqlIdentifierQuote = `"{{.Raw}}"` - sqlValueSeparator = `, ` - sqlValueQuote = `'{{.}}'` - - sqlAndKeyword = `AND` - sqlOrKeyword = `OR` - sqlNotKeyword = `NOT` - sqlDescKeyword = `DESC` - sqlAscKeyword = `ASC` - sqlDefaultOperator = `=` - sqlClauseGroup = `({{.}})` - sqlClauseOperator = ` {{.}} ` - sqlColumnValue = `{{.Column}} {{.Operator}} {{.Value}}` - - sqlOrderByLayout = ` - {{if .Columns}} - ORDER BY {{.Columns}} {{.Sort}} - {{end}} - ` - - sqlWhereLayout = ` - {{if .Conds}} - WHERE {{.Conds}} - {{end}} - ` - - sqlSelectLayout = ` - SELECT - - {{if .Columns}} - {{.Columns}} - {{else}} - * - {{end}} - - FROM {{.Table}} - - {{.Where}} - - {{.OrderBy}} - - {{if .Limit}} - LIMIT {{.Limit}} - {{end}} - - {{if .Offset}} - OFFSET {{.Offset}} - {{end}} - ` - sqlDeleteLayout = ` - DELETE - FROM {{.Table}} - {{.Where}} - ` - sqlUpdateLayout = ` - UPDATE - {{.Table}} - SET {{.ColumnValues}} - {{ .Where }} - ` - - sqlSelectCountLayout = ` - SELECT - COUNT(1) AS _t - FROM {{.Table}} - {{.Where}} - ` - - sqlInsertLayout = ` - INSERT INTO {{.Table}} - ({{.Columns}}) - VALUES - ({{.Values}}) - ` - - sqlTruncateLayout = ` - TRUNCATE TABLE {{.Table}} - ` - - sqlDropDatabaseLayout = ` - DROP DATABASE {{.Database}} - ` - - sqlDropTableLayout = ` - DROP TABLE {{.Table}} - ` -) - type Type uint const ( @@ -142,21 +51,21 @@ type Statement struct { func (self *Statement) Compile() string { switch self.Type { case SqlTruncate: - return mustParse(sqlTruncateLayout, self) + return mustParse(Layout.TruncateLayout, self) case SqlDropTable: - return mustParse(sqlDropTableLayout, self) + return mustParse(Layout.DropTableLayout, self) case SqlDropDatabase: - return mustParse(sqlDropDatabaseLayout, self) + return mustParse(Layout.DropDatabaseLayout, self) case SqlSelectCount: - return mustParse(sqlSelectCountLayout, self) + return mustParse(Layout.SelectCountLayout, self) case SqlSelect: - return mustParse(sqlSelectLayout, self) + return mustParse(Layout.SelectLayout, self) case SqlDelete: - return mustParse(sqlDeleteLayout, self) + return mustParse(Layout.DeleteLayout, self) case SqlUpdate: - return mustParse(sqlUpdateLayout, self) + return mustParse(Layout.UpdateLayout, self) case SqlInsert: - return mustParse(sqlInsertLayout, self) + return mustParse(Layout.InsertLayout, self) } return "" } diff --git a/util/sqlgen/order_by.go b/util/sqlgen/order_by.go index 36feceb4d51b9395e596cb25940d4a39935694c1..198b33bdbb754c41b5ca416eab6f70b946c30124 100644 --- a/util/sqlgen/order_by.go +++ b/util/sqlgen/order_by.go @@ -7,7 +7,7 @@ type OrderBy struct { func (self OrderBy) String() string { if self.Columns.Len() > 0 { - return mustParse(sqlOrderByLayout, self) + return mustParse(Layout.OrderByLayout, self) } return "" } @@ -25,9 +25,9 @@ const ( func (self Sort) String() string { switch self.v { case SqlSortAsc: - return sqlAscKeyword + return Layout.AscKeyword case SqlSortDesc: - return sqlDescKeyword + return Layout.DescKeyword } return "" } diff --git a/util/sqlgen/table.go b/util/sqlgen/table.go index dc1db4799a473880b365abc8ad6228459791c160..ddd3006adcd91667d2da89189d8e82e95d7b7c0f 100644 --- a/util/sqlgen/table.go +++ b/util/sqlgen/table.go @@ -9,5 +9,5 @@ type Table struct { } func (self Table) String() string { - return mustParse(sqlIdentifierQuote, Raw{fmt.Sprintf(`%v`, self.v)}) + return mustParse(Layout.IdentifierQuote, Raw{fmt.Sprintf(`%v`, self.v)}) } diff --git a/util/sqlgen/value.go b/util/sqlgen/value.go index f4d839eeeade25f961578f137a783d0fa322e990..859c8fcde76896540a319568879b624fce83f0a4 100644 --- a/util/sqlgen/value.go +++ b/util/sqlgen/value.go @@ -15,7 +15,7 @@ func (self Value) String() string { if raw, ok := self.v.(Raw); ok { return raw.Raw } - return mustParse(sqlValueQuote, Raw{fmt.Sprintf(`%v`, self.v)}) + return mustParse(Layout.ValueQuote, Raw{fmt.Sprintf(`%v`, self.v)}) } func (self Values) String() string { @@ -28,7 +28,7 @@ func (self Values) String() string { chunks = append(chunks, self[i].String()) } - return strings.Join(chunks, sqlValueSeparator) + return strings.Join(chunks, Layout.ValueSeparator) } return "" diff --git a/util/sqlgen/where.go b/util/sqlgen/where.go index 99dfae74bbcf1566991a13bac10f148a2da25d1b..5673923a09f034a6f9301af9302cc07b8dec0ef3 100644 --- a/util/sqlgen/where.go +++ b/util/sqlgen/where.go @@ -15,17 +15,17 @@ type conds struct { } func (self Or) String() string { - return groupCondition(self, mustParse(sqlClauseOperator, sqlOrKeyword)) + return groupCondition(self, mustParse(Layout.ClauseOperator, Layout.OrKeyword)) } func (self And) String() string { - return groupCondition(self, mustParse(sqlClauseOperator, sqlAndKeyword)) + return groupCondition(self, mustParse(Layout.ClauseOperator, Layout.AndKeyword)) } func (self Where) String() string { - grouped := groupCondition(self, mustParse(sqlClauseOperator, sqlAndKeyword)) + grouped := groupCondition(self, mustParse(Layout.ClauseOperator, Layout.AndKeyword)) if grouped != "" { - return mustParse(sqlWhereLayout, conds{grouped}) + return mustParse(Layout.WhereLayout, conds{grouped}) } return "" } @@ -52,7 +52,7 @@ func groupCondition(terms []interface{}, joinKeyword string) string { } if len(chunks) > 0 { - return mustParse(sqlClauseGroup, strings.Join(chunks, joinKeyword)) + return mustParse(Layout.ClauseGroup, strings.Join(chunks, joinKeyword)) } return ""