@@ -12,40 +12,50 @@ import (
1212 "github.com/xfali/gobatis/errors"
1313 "github.com/xfali/gobatis/logging"
1414 "github.com/xfali/gobatis/parsing"
15+ "github.com/xfali/gobatis/parsing/sqlparser"
16+ "github.com/xfali/gobatis/parsing/template"
1517 "github.com/xfali/gobatis/parsing/xml"
1618 "sync"
1719)
1820
19- type SqlManager struct {
21+ type dynamicSqlManager struct {
2022 sqlMap map [string ]* parsing.DynamicData
2123 lock sync.Mutex
2224}
2325
24- var g_sql_mgr = SqlManager {sqlMap : map [string ]* parsing.DynamicData {}}
26+ type sqlManager struct {
27+ dynamicSqlMgr * dynamicSqlManager
28+ templateSqlMgr * template.Manager
29+ }
30+
31+ var g_sql_mgr = sqlManager {
32+ dynamicSqlMgr : & dynamicSqlManager {sqlMap : map [string ]* parsing.DynamicData {}},
33+ templateSqlMgr : template .NewManager (),
34+ }
2535
2636func RegisterSql (sqlId string , sql string ) error {
27- g_sql_mgr .lock .Lock ()
28- defer g_sql_mgr .lock .Unlock ()
37+ g_sql_mgr .dynamicSqlMgr . lock .Lock ()
38+ defer g_sql_mgr .dynamicSqlMgr . lock .Unlock ()
2939
30- if _ , ok := g_sql_mgr .sqlMap [sqlId ]; ok {
40+ if _ , ok := g_sql_mgr .dynamicSqlMgr . sqlMap [sqlId ]; ok {
3141 return errors .SQL_ID_DUPLICATES
3242 } else {
3343 dd := & parsing.DynamicData {OriginData : sql }
34- g_sql_mgr .sqlMap [sqlId ] = dd
44+ g_sql_mgr .dynamicSqlMgr . sqlMap [sqlId ] = dd
3545 }
3646 return nil
3747}
3848
3949func UnregisterSql (sqlId string ) {
40- g_sql_mgr .lock .Lock ()
41- defer g_sql_mgr .lock .Unlock ()
50+ g_sql_mgr .dynamicSqlMgr . lock .Lock ()
51+ defer g_sql_mgr .dynamicSqlMgr . lock .Unlock ()
4252
43- delete (g_sql_mgr .sqlMap , sqlId )
53+ delete (g_sql_mgr .dynamicSqlMgr . sqlMap , sqlId )
4454}
4555
4656func RegisterMapperData (data []byte ) error {
47- g_sql_mgr .lock .Lock ()
48- defer g_sql_mgr .lock .Unlock ()
57+ g_sql_mgr .dynamicSqlMgr . lock .Lock ()
58+ defer g_sql_mgr .dynamicSqlMgr . lock .Unlock ()
4959
5060 mapper , err := xml .Parse (data )
5161 if err != nil {
@@ -57,8 +67,8 @@ func RegisterMapperData(data []byte) error {
5767}
5868
5969func RegisterMapperFile (file string ) error {
60- g_sql_mgr .lock .Lock ()
61- defer g_sql_mgr .lock .Unlock ()
70+ g_sql_mgr .dynamicSqlMgr . lock .Lock ()
71+ defer g_sql_mgr .dynamicSqlMgr . lock .Unlock ()
6272
6373 mapper , err := xml .ParseFile (file )
6474 if err != nil {
@@ -72,18 +82,31 @@ func RegisterMapperFile(file string) error {
7282func formatMapper (mapper * xml.Mapper ) error {
7383 ret := mapper .Format ()
7484 for k , v := range ret {
75- if _ , ok := g_sql_mgr .sqlMap [k ]; ok {
85+ if _ , ok := g_sql_mgr .dynamicSqlMgr . sqlMap [k ]; ok {
7686 return errors .SQL_ID_DUPLICATES
7787 } else {
78- g_sql_mgr .sqlMap [k ] = v
88+ g_sql_mgr .dynamicSqlMgr . sqlMap [k ] = v
7989 }
8090 }
8191 return nil
8292}
8393
84- func FindSql (sqlId string ) * parsing.DynamicData {
85- g_sql_mgr .lock .Lock ()
86- defer g_sql_mgr .lock .Unlock ()
94+ func FindDynamicSql (sqlId string ) (sqlparser.SqlParser , bool ) {
95+ g_sql_mgr .dynamicSqlMgr .lock .Lock ()
96+ defer g_sql_mgr .dynamicSqlMgr .lock .Unlock ()
97+
98+ v , ok := g_sql_mgr .dynamicSqlMgr .sqlMap [sqlId ]
99+ return v , ok
100+ }
101+
102+ func RegisterTemplateData (data []byte ) error {
103+ return g_sql_mgr .templateSqlMgr .RegisterData (data )
104+ }
105+
106+ func RegisterTemplateFile (file string ) error {
107+ return g_sql_mgr .templateSqlMgr .RegisterFile (file )
108+ }
87109
88- return g_sql_mgr .sqlMap [sqlId ]
110+ func FindTemplateSql (sqlId string ) (sqlparser.SqlParser , bool ) {
111+ return g_sql_mgr .templateSqlMgr .FindSql (sqlId )
89112}
0 commit comments