diff --git a/util/sqlgen/statement.go b/util/sqlgen/statement.go
index 0efd906aad2518a82c5753959ce6914f77c6096c..b7b4ec472bcc2214f768b63cf854437307c8c002 100644
--- a/util/sqlgen/statement.go
+++ b/util/sqlgen/statement.go
@@ -1,5 +1,9 @@
 package sqlgen
 
+import (
+	"strconv"
+)
+
 type Statement struct {
 	Type
 	Table
@@ -29,8 +33,30 @@ type statement_s struct {
 	Where        string
 }
 
+func (self Statement) Hash() string {
+	hash := `Statement(` +
+		strconv.Itoa(int(self.Type)) + `;` +
+		self.Table.Hash() + `;` +
+		self.Database.Hash() + `;` +
+		strconv.Itoa(int(self.Limit)) + `;` +
+		strconv.Itoa(int(self.Offset)) + `;` +
+		self.Columns.Hash() + `;` +
+		self.Values.Hash() + `;` +
+		self.ColumnValues.Hash() + `;` +
+		self.OrderBy.Hash() + `;` +
+		self.GroupBy.Hash() + `;` +
+		string(self.Extra) + `;` +
+		self.Where.Hash() +
+		`)`
+	return hash
+}
+
 func (self *Statement) Compile(layout *Template) (compiled string) {
 
+	if c, ok := layout.Read(self); ok {
+		return c
+	}
+
 	data := statement_s{
 		Table:        self.Table.Compile(layout),
 		Database:     self.Database.Compile(layout),
@@ -62,9 +88,9 @@ func (self *Statement) Compile(layout *Template) (compiled string) {
 		compiled = mustParse(layout.UpdateLayout, data)
 	case SqlInsert:
 		compiled = mustParse(layout.InsertLayout, data)
-	default:
-		compiled = ""
 	}
 
+	layout.Write(self, compiled)
+
 	return compiled
 }