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 ""