Przeglądaj źródła

sqlmap support xsql

xormplus 7 lat temu
rodzic
commit
174ee9cb1b
7 zmienionych plików z 435 dodań i 308 usunięć
  1. 224 0
      engine_sqlmap.go
  2. 60 0
      engine_sqltemplate.go
  3. 13 252
      sqlmap.go
  4. 21 0
      sqlmap_json.go
  5. 30 0
      sqlmap_xml.go
  6. 87 0
      sqlmap_xsql.go
  7. 0 56
      sqltemplate.go

+ 224 - 0
engine_sqlmap.go

@@ -0,0 +1,224 @@
+package xorm
+
+import (
+	"os"
+	"path/filepath"
+	"strings"
+)
+
+func (engine *Engine) SetSqlMapCipher(cipher Cipher) {
+	engine.SqlMap.Cipher = cipher
+}
+
+func (engine *Engine) ClearSqlMapCipher() {
+	engine.SqlMap.Cipher = nil
+}
+
+func (engine *Engine) RegisterSqlMap(sqlm SqlM, Cipher ...Cipher) error {
+	switch sqlm.(type) {
+	case *XmlSqlMap:
+		if len(engine.SqlMap.Extension) == 0 {
+			engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+		}
+		engine.SqlMap.Extension["xml"] = sqlm.Extension()
+	case *JsonSqlMap:
+		if len(engine.SqlMap.Extension) == 0 {
+			engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+		}
+		engine.SqlMap.Extension["json"] = sqlm.Extension()
+	case *XSqlMap:
+		if len(engine.SqlMap.Extension) == 0 {
+			engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+		}
+		engine.SqlMap.Extension["xsql"] = sqlm.Extension()
+	default:
+		return ErrParamsType
+	}
+
+	if len(Cipher) > 0 {
+		engine.SqlMap.Cipher = Cipher[0]
+	}
+
+	engine.SqlMap.SqlMapRootDir = sqlm.RootDir()
+
+	err := filepath.Walk(engine.SqlMap.SqlMapRootDir, engine.SqlMap.walkFunc)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (engine *Engine) LoadSqlMap(filepath string) error {
+
+	if len(engine.SqlMap.Extension) == 0 {
+		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+	} else {
+		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
+			engine.SqlMap.Extension["xml"] = ".xml"
+		}
+		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
+			engine.SqlMap.Extension["json"] = ".json"
+		}
+		if engine.SqlMap.Extension["xsql"] == "" || len(engine.SqlMap.Extension["xsql"]) == 0 {
+			engine.SqlMap.Extension["xsql"] = ".sql"
+		}
+	}
+
+	if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["xsql"]) {
+		err := engine.loadSqlMap(filepath)
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (engine *Engine) BatchLoadSqlMap(filepathSlice []string) error {
+	if len(engine.SqlMap.Extension) == 0 {
+		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+	} else {
+		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
+			engine.SqlMap.Extension["xml"] = ".xml"
+		}
+		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
+			engine.SqlMap.Extension["json"] = ".json"
+		}
+		if engine.SqlMap.Extension["xsql"] == "" || len(engine.SqlMap.Extension["xsql"]) == 0 {
+			engine.SqlMap.Extension["xsql"] = ".sql"
+		}
+	}
+
+	for _, filepath := range filepathSlice {
+		if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["xsql"]) {
+			err := engine.loadSqlMap(filepath)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	return nil
+}
+
+func (engine *Engine) ReloadSqlMap(filepath string) error {
+	if len(engine.SqlMap.Extension) == 0 {
+		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+	} else {
+		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
+			engine.SqlMap.Extension["xml"] = ".xml"
+		}
+		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
+			engine.SqlMap.Extension["json"] = ".json"
+		}
+		if engine.SqlMap.Extension["xsql"] == "" || len(engine.SqlMap.Extension["xsql"]) == 0 {
+			engine.SqlMap.Extension["xsql"] = ".sql"
+		}
+	}
+
+	if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["xsql"]) {
+		err := engine.reloadSqlMap(filepath)
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (engine *Engine) BatchReloadSqlMap(filepathSlice []string) error {
+	if len(engine.SqlMap.Extension) == 0 {
+		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json", "xsql": ".sql"}
+	} else {
+		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
+			engine.SqlMap.Extension["xml"] = ".xml"
+		}
+		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
+			engine.SqlMap.Extension["json"] = ".json"
+		}
+		if engine.SqlMap.Extension["xsql"] == "" || len(engine.SqlMap.Extension["xsql"]) == 0 {
+			engine.SqlMap.Extension["xsql"] = ".sql"
+		}
+	}
+
+	for _, filepath := range filepathSlice {
+		if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["xsql"]) {
+			err := engine.loadSqlMap(filepath)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	return nil
+}
+
+func (engine *Engine) loadSqlMap(filepath string) error {
+
+	info, err := os.Lstat(filepath)
+	if err != nil {
+		return err
+	}
+
+	if info.IsDir() {
+		return nil
+	}
+
+	err = engine.SqlMap.paresSql(filepath)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (engine *Engine) reloadSqlMap(filepath string) error {
+
+	info, err := os.Lstat(filepath)
+	if err != nil {
+		return err
+	}
+
+	if info.IsDir() {
+		return nil
+	}
+	err = engine.SqlMap.paresSql(filepath)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (engine *Engine) AddSql(key string, sql string) {
+	engine.SqlMap.addSql(key, sql)
+}
+
+func (engine *Engine) UpdateSql(key string, sql string) {
+	engine.SqlMap.updateSql(key, sql)
+}
+
+func (engine *Engine) RemoveSql(key string) {
+	engine.SqlMap.removeSql(key)
+}
+
+func (engine *Engine) BatchAddSql(sqlStrMap map[string]string) {
+	engine.SqlMap.batchAddSql(sqlStrMap)
+}
+
+func (engine *Engine) BatchUpdateSql(sqlStrMap map[string]string) {
+	engine.SqlMap.batchUpdateSql(sqlStrMap)
+}
+
+func (engine *Engine) BatchRemoveSql(key []string) {
+	engine.SqlMap.batchRemoveSql(key)
+}
+
+func (engine *Engine) GetSql(key string) string {
+	return engine.SqlMap.getSql(key)
+}
+
+func (engine *Engine) GetSqlMap(keys ...interface{}) map[string]string {
+	return engine.SqlMap.getSqlMap(keys...)
+}

+ 60 - 0
engine_sqltemplate.go

@@ -0,0 +1,60 @@
+package xorm
+
+import (
+	"path/filepath"
+)
+
+func (engine *Engine) RegisterSqlTemplate(sqlt SqlTemplate, Cipher ...Cipher) error {
+	engine.SqlTemplate = sqlt
+	if len(Cipher) > 0 {
+		engine.SqlTemplate.SetSqlTemplateCipher(Cipher[0])
+	}
+	err := filepath.Walk(engine.SqlTemplate.RootDir(), engine.SqlTemplate.WalkFunc)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (engine *Engine) LoadSqlTemplate(filepath string) error {
+	return engine.SqlTemplate.LoadSqlTemplate(filepath)
+}
+
+func (engine *Engine) BatchLoadSqlTemplate(filepathSlice []string) error {
+	return engine.SqlTemplate.BatchLoadSqlTemplate(filepathSlice)
+}
+
+func (engine *Engine) ReloadSqlTemplate(filepath string) error {
+	return engine.SqlTemplate.ReloadSqlTemplate(filepath)
+}
+
+func (engine *Engine) BatchReloadSqlTemplate(filepathSlice []string) error {
+	return engine.SqlTemplate.BatchReloadSqlTemplate(filepathSlice)
+}
+
+func (engine *Engine) AddSqlTemplate(key string, sqlTemplateStr string) error {
+	return engine.SqlTemplate.AddSqlTemplate(key, sqlTemplateStr)
+}
+
+func (engine *Engine) UpdateSqlTemplate(key string, sqlTemplateStr string) error {
+	return engine.SqlTemplate.UpdateSqlTemplate(key, sqlTemplateStr)
+}
+
+func (engine *Engine) RemoveSqlTemplate(key string) {
+	engine.SqlTemplate.RemoveSqlTemplate(key)
+}
+
+func (engine *Engine) BatchAddSqlTemplate(key string, sqlTemplateStrMap map[string]string) error {
+	return engine.SqlTemplate.BatchAddSqlTemplate(key, sqlTemplateStrMap)
+
+}
+
+func (engine *Engine) BatchUpdateSqlTemplate(key string, sqlTemplateStrMap map[string]string) error {
+	return engine.SqlTemplate.BatchUpdateSqlTemplate(key, sqlTemplateStrMap)
+
+}
+
+func (engine *Engine) BatchRemoveSqlTemplate(key []string) {
+	engine.SqlTemplate.BatchRemoveSqlTemplate(key)
+}

+ 13 - 252
sqlmap.go

@@ -1,13 +1,13 @@
 package xorm
 
 import (
+	"bufio"
+	"bytes"
 	"encoding/json"
 	"encoding/xml"
 	"fmt"
 	"io/ioutil"
-
 	"os"
-	"path/filepath"
 	"strings"
 )
 
@@ -19,23 +19,6 @@ type SqlMap struct {
 	Cipher        Cipher
 }
 
-type Result struct {
-	Sql []Sql `xml:"sql"`
-}
-
-type Sql struct {
-	Value string `xml:",chardata"`
-	Id    string `xml:"id,attr"`
-}
-
-func (engine *Engine) SetSqlMapCipher(cipher Cipher) {
-	engine.SqlMap.Cipher = cipher
-}
-
-func (engine *Engine) ClearSqlMapCipher() {
-	engine.SqlMap.Cipher = nil
-}
-
 func (sqlMap *SqlMap) checkNilAndInit() {
 	if sqlMap.Sql == nil {
 		if sqlMap.Capacity == 0 {
@@ -52,206 +35,6 @@ type SqlM interface {
 	Extension() string
 }
 
-type XmlSqlMap struct {
-	sqlMapRootDir string
-	extension     string
-}
-
-type JsonSqlMap struct {
-	sqlMapRootDir string
-	extension     string
-}
-
-func Xml(directory, extension string) *XmlSqlMap {
-	return &XmlSqlMap{
-		sqlMapRootDir: directory,
-		extension:     extension,
-	}
-}
-
-func Json(directory, extension string) *JsonSqlMap {
-	return &JsonSqlMap{
-		sqlMapRootDir: directory,
-		extension:     extension,
-	}
-}
-
-func (sqlMap *XmlSqlMap) RootDir() string {
-	return sqlMap.sqlMapRootDir
-}
-
-func (sqlMap *JsonSqlMap) RootDir() string {
-	return sqlMap.sqlMapRootDir
-}
-
-func (sqlMap *XmlSqlMap) Extension() string {
-	return sqlMap.extension
-}
-
-func (sqlMap *JsonSqlMap) Extension() string {
-	return sqlMap.extension
-}
-
-func (engine *Engine) RegisterSqlMap(sqlm SqlM, Cipher ...Cipher) error {
-	switch sqlm.(type) {
-	case *XmlSqlMap:
-		if len(engine.SqlMap.Extension) == 0 {
-			engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json"}
-		}
-		engine.SqlMap.Extension["xml"] = sqlm.Extension()
-	case *JsonSqlMap:
-		if len(engine.SqlMap.Extension) == 0 {
-			engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json"}
-		}
-		engine.SqlMap.Extension["json"] = sqlm.Extension()
-	default:
-		return ErrParamsType
-	}
-
-	if len(Cipher) > 0 {
-		engine.SqlMap.Cipher = Cipher[0]
-	}
-
-	engine.SqlMap.SqlMapRootDir = sqlm.RootDir()
-
-	err := filepath.Walk(engine.SqlMap.SqlMapRootDir, engine.SqlMap.walkFunc)
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func (engine *Engine) LoadSqlMap(filepath string) error {
-
-	if len(engine.SqlMap.Extension) == 0 {
-		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json"}
-	} else {
-		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
-			engine.SqlMap.Extension["xml"] = ".xml"
-		}
-		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
-			engine.SqlMap.Extension["json"] = ".json"
-		}
-	}
-
-	if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) {
-		err := engine.loadSqlMap(filepath)
-		if err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
-func (engine *Engine) BatchLoadSqlMap(filepathSlice []string) error {
-	if len(engine.SqlMap.Extension) == 0 {
-		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json"}
-	} else {
-		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
-			engine.SqlMap.Extension["xml"] = ".xml"
-		}
-		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
-			engine.SqlMap.Extension["json"] = ".json"
-		}
-	}
-
-	for _, filepath := range filepathSlice {
-		if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) {
-			err := engine.loadSqlMap(filepath)
-			if err != nil {
-				return err
-			}
-		}
-	}
-
-	return nil
-}
-
-func (engine *Engine) ReloadSqlMap(filepath string) error {
-	if len(engine.SqlMap.Extension) == 0 {
-		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json"}
-	} else {
-		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
-			engine.SqlMap.Extension["xml"] = ".xml"
-		}
-		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
-			engine.SqlMap.Extension["json"] = ".json"
-		}
-	}
-
-	if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) {
-		err := engine.reloadSqlMap(filepath)
-		if err != nil {
-			return err
-		}
-	}
-
-	return nil
-}
-
-func (engine *Engine) BatchReloadSqlMap(filepathSlice []string) error {
-	if len(engine.SqlMap.Extension) == 0 {
-		engine.SqlMap.Extension = map[string]string{"xml": ".xml", "json": ".json"}
-	} else {
-		if engine.SqlMap.Extension["xml"] == "" || len(engine.SqlMap.Extension["xml"]) == 0 {
-			engine.SqlMap.Extension["xml"] = ".xml"
-		}
-		if engine.SqlMap.Extension["json"] == "" || len(engine.SqlMap.Extension["json"]) == 0 {
-			engine.SqlMap.Extension["json"] = ".json"
-		}
-	}
-
-	for _, filepath := range filepathSlice {
-		if strings.HasSuffix(filepath, engine.SqlMap.Extension["xml"]) || strings.HasSuffix(filepath, engine.SqlMap.Extension["json"]) {
-			err := engine.loadSqlMap(filepath)
-			if err != nil {
-				return err
-			}
-		}
-	}
-
-	return nil
-}
-
-func (engine *Engine) loadSqlMap(filepath string) error {
-
-	info, err := os.Lstat(filepath)
-	if err != nil {
-		return err
-	}
-
-	if info.IsDir() {
-		return nil
-	}
-
-	err = engine.SqlMap.paresSql(filepath)
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func (engine *Engine) reloadSqlMap(filepath string) error {
-
-	info, err := os.Lstat(filepath)
-	if err != nil {
-		return err
-	}
-
-	if info.IsDir() {
-		return nil
-	}
-	err = engine.SqlMap.paresSql(filepath)
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
 func (sqlMap *SqlMap) walkFunc(path string, info os.FileInfo, err error) error {
 	if err != nil {
 		return err
@@ -261,7 +44,7 @@ func (sqlMap *SqlMap) walkFunc(path string, info os.FileInfo, err error) error {
 		return nil
 	}
 
-	if strings.HasSuffix(path, sqlMap.Extension["xml"]) || strings.HasSuffix(path, sqlMap.Extension["json"]) {
+	if strings.HasSuffix(path, sqlMap.Extension["xml"]) || strings.HasSuffix(path, sqlMap.Extension["json"]) || strings.HasSuffix(path, sqlMap.Extension["xsql"]) {
 		err = sqlMap.paresSql(path)
 		if err != nil {
 			return err
@@ -315,12 +98,18 @@ func (sqlMap *SqlMap) paresSql(filepath string) error {
 
 		return nil
 	}
-	return nil
 
-}
+	if strings.HasSuffix(filepath, sqlMap.Extension["xsql"]) {
+		scanner := &Scanner{}
+		result := scanner.Run(bufio.NewScanner(bytes.NewReader(content)))
+		for k := range result {
+			sqlMap.Sql[k] = result[k]
+		}
+
+		return nil
+	}
+	return nil
 
-func (engine *Engine) AddSql(key string, sql string) {
-	engine.SqlMap.addSql(key, sql)
 }
 
 func (sqlMap *SqlMap) addSql(key string, sql string) {
@@ -328,28 +117,16 @@ func (sqlMap *SqlMap) addSql(key string, sql string) {
 	sqlMap.Sql[key] = sql
 }
 
-func (engine *Engine) UpdateSql(key string, sql string) {
-	engine.SqlMap.updateSql(key, sql)
-}
-
 func (sqlMap *SqlMap) updateSql(key string, sql string) {
 	sqlMap.checkNilAndInit()
 	sqlMap.Sql[key] = sql
 }
 
-func (engine *Engine) RemoveSql(key string) {
-	engine.SqlMap.removeSql(key)
-}
-
 func (sqlMap *SqlMap) removeSql(key string) {
 	sqlMap.checkNilAndInit()
 	delete(sqlMap.Sql, key)
 }
 
-func (engine *Engine) BatchAddSql(sqlStrMap map[string]string) {
-	engine.SqlMap.batchAddSql(sqlStrMap)
-}
-
 func (sqlMap *SqlMap) batchAddSql(sqlStrMap map[string]string) {
 	sqlMap.checkNilAndInit()
 	for k, v := range sqlStrMap {
@@ -357,10 +134,6 @@ func (sqlMap *SqlMap) batchAddSql(sqlStrMap map[string]string) {
 	}
 }
 
-func (engine *Engine) BatchUpdateSql(sqlStrMap map[string]string) {
-	engine.SqlMap.batchUpdateSql(sqlStrMap)
-}
-
 func (sqlMap *SqlMap) batchUpdateSql(sqlStrMap map[string]string) {
 	sqlMap.checkNilAndInit()
 	for k, v := range sqlStrMap {
@@ -368,10 +141,6 @@ func (sqlMap *SqlMap) batchUpdateSql(sqlStrMap map[string]string) {
 	}
 }
 
-func (engine *Engine) BatchRemoveSql(key []string) {
-	engine.SqlMap.batchRemoveSql(key)
-}
-
 func (sqlMap *SqlMap) batchRemoveSql(key []string) {
 	sqlMap.checkNilAndInit()
 	for _, v := range key {
@@ -379,18 +148,10 @@ func (sqlMap *SqlMap) batchRemoveSql(key []string) {
 	}
 }
 
-func (engine *Engine) GetSql(key string) string {
-	return engine.SqlMap.getSql(key)
-}
-
 func (sqlMap *SqlMap) getSql(key string) string {
 	return sqlMap.Sql[key]
 }
 
-func (engine *Engine) GetSqlMap(keys ...interface{}) map[string]string {
-	return engine.SqlMap.getSqlMap(keys...)
-}
-
 func (sqlMap *SqlMap) getSqlMap(keys ...interface{}) map[string]string {
 	var resultSqlMap map[string]string
 	i := len(keys)

+ 21 - 0
sqlmap_json.go

@@ -0,0 +1,21 @@
+package xorm
+
+type JsonSqlMap struct {
+	sqlMapRootDir string
+	extension     string
+}
+
+func Json(directory, extension string) *JsonSqlMap {
+	return &JsonSqlMap{
+		sqlMapRootDir: directory,
+		extension:     extension,
+	}
+}
+
+func (sqlMap *JsonSqlMap) RootDir() string {
+	return sqlMap.sqlMapRootDir
+}
+
+func (sqlMap *JsonSqlMap) Extension() string {
+	return sqlMap.extension
+}

+ 30 - 0
sqlmap_xml.go

@@ -0,0 +1,30 @@
+package xorm
+
+type XmlSqlMap struct {
+	sqlMapRootDir string
+	extension     string
+}
+
+type Result struct {
+	Sql []Sql `xml:"sql"`
+}
+
+type Sql struct {
+	Value string `xml:",chardata"`
+	Id    string `xml:"id,attr"`
+}
+
+func Xml(directory, extension string) *XmlSqlMap {
+	return &XmlSqlMap{
+		sqlMapRootDir: directory,
+		extension:     extension,
+	}
+}
+
+func (sqlMap *XmlSqlMap) RootDir() string {
+	return sqlMap.sqlMapRootDir
+}
+
+func (sqlMap *XmlSqlMap) Extension() string {
+	return sqlMap.extension
+}

+ 87 - 0
sqlmap_xsql.go

@@ -0,0 +1,87 @@
+package xorm
+
+import (
+	"bufio"
+	"regexp"
+	"strings"
+)
+
+type XSqlMap struct {
+	sqlMapRootDir string
+	extension     string
+}
+
+func XSql(directory, extension string) *XSqlMap {
+	return &XSqlMap{
+		sqlMapRootDir: directory,
+		extension:     extension,
+	}
+}
+
+func (sqlMap *XSqlMap) RootDir() string {
+	return sqlMap.sqlMapRootDir
+}
+
+func (sqlMap *XSqlMap) Extension() string {
+	return sqlMap.extension
+}
+
+type Scanner struct {
+	line    string
+	queries map[string]string
+	current string
+}
+
+type stateFn func(*Scanner) stateFn
+
+func getTag(line string) string {
+	re := regexp.MustCompile("^\\s*--\\s*id:\\s*(\\S+)")
+	matches := re.FindStringSubmatch(line)
+	if matches == nil {
+		return ""
+	}
+	return matches[1]
+}
+
+func initialState(s *Scanner) stateFn {
+	if tag := getTag(s.line); len(tag) > 0 {
+		s.current = tag
+		return queryState
+	}
+	return initialState
+}
+
+func queryState(s *Scanner) stateFn {
+	if tag := getTag(s.line); len(tag) > 0 {
+		s.current = tag
+	} else {
+		s.appendQueryLine()
+	}
+	return queryState
+}
+
+func (s *Scanner) appendQueryLine() {
+	current := s.queries[s.current]
+	line := strings.Trim(s.line, " \t")
+	if len(line) == 0 {
+		return
+	}
+
+	if len(current) > 0 {
+		current = current + "\n"
+	}
+
+	current = current + line
+	s.queries[s.current] = current
+}
+
+func (s *Scanner) Run(io *bufio.Scanner) map[string]string {
+	s.queries = make(map[string]string)
+
+	for state := initialState; io.Scan(); {
+		s.line = io.Text()
+		state = state(s)
+	}
+
+	return s.queries
+}

+ 0 - 56
sqltemplate.go

@@ -3,7 +3,6 @@ package xorm
 import (
 	"html/template"
 	"os"
-	"path/filepath"
 
 	"github.com/CloudyKit/jet"
 	"gopkg.in/flosch/pongo2.v3"
@@ -55,58 +54,3 @@ func Jet(directory, extension string) *JetTemplate {
 		Template:           template,
 	}
 }
-
-func (engine *Engine) RegisterSqlTemplate(sqlt SqlTemplate, Cipher ...Cipher) error {
-	engine.SqlTemplate = sqlt
-	if len(Cipher) > 0 {
-		engine.SqlTemplate.SetSqlTemplateCipher(Cipher[0])
-	}
-	err := filepath.Walk(engine.SqlTemplate.RootDir(), engine.SqlTemplate.WalkFunc)
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func (engine *Engine) LoadSqlTemplate(filepath string) error {
-	return engine.SqlTemplate.LoadSqlTemplate(filepath)
-}
-
-func (engine *Engine) BatchLoadSqlTemplate(filepathSlice []string) error {
-	return engine.SqlTemplate.BatchLoadSqlTemplate(filepathSlice)
-}
-
-func (engine *Engine) ReloadSqlTemplate(filepath string) error {
-	return engine.SqlTemplate.ReloadSqlTemplate(filepath)
-}
-
-func (engine *Engine) BatchReloadSqlTemplate(filepathSlice []string) error {
-	return engine.SqlTemplate.BatchReloadSqlTemplate(filepathSlice)
-}
-
-func (engine *Engine) AddSqlTemplate(key string, sqlTemplateStr string) error {
-	return engine.SqlTemplate.AddSqlTemplate(key, sqlTemplateStr)
-}
-
-func (engine *Engine) UpdateSqlTemplate(key string, sqlTemplateStr string) error {
-	return engine.SqlTemplate.UpdateSqlTemplate(key, sqlTemplateStr)
-}
-
-func (engine *Engine) RemoveSqlTemplate(key string) {
-	engine.SqlTemplate.RemoveSqlTemplate(key)
-}
-
-func (engine *Engine) BatchAddSqlTemplate(key string, sqlTemplateStrMap map[string]string) error {
-	return engine.SqlTemplate.BatchAddSqlTemplate(key, sqlTemplateStrMap)
-
-}
-
-func (engine *Engine) BatchUpdateSqlTemplate(key string, sqlTemplateStrMap map[string]string) error {
-	return engine.SqlTemplate.BatchUpdateSqlTemplate(key, sqlTemplateStrMap)
-
-}
-
-func (engine *Engine) BatchRemoveSqlTemplate(key []string) {
-	engine.SqlTemplate.BatchRemoveSqlTemplate(key)
-}