From c676532f80c288f546d8ea1a442a6bfc0e2e6498 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Carlos=20Nieto?= <jose.carlos@menteslibres.net>
Date: Sun, 14 Sep 2014 16:05:41 -0500
Subject: [PATCH] Adding caching for Statement struct.

---
 util/sqlgen/statement.go | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/util/sqlgen/statement.go b/util/sqlgen/statement.go
index 0efd906a..b7b4ec47 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
 }
-- 
GitLab