| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package xorm
- import (
- "encoding/xml"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- // "fmt"
- "github.com/Unknwon/goconfig"
- "gopkg.in/flosch/pongo2.v3"
- )
- const (
- MSSQL_DRIVER string = "mssql"
- MSSQL_ODBC_DRIVER string = "odbc"
- MYSQL_DRIVER string = "mysql"
- MYMYSQL_DRIVER string = "mymysql"
- POSTGRESQL_DRIVER string = "postgres"
- OCI8_DRIVER string = "oci8"
- GORACLE_DRIVER string = "goracle"
- SQLITE3_DRIVER string = "sqlite3"
- )
- type SqlMap struct {
- Sql map[string]string
- SqlTemplate map[string]*pongo2.Template
- Cfg goconfig.ConfigFile
- }
- type Result struct {
- Sql []Sql `xml:"sql"`
- }
- type Sql struct {
- Value string `xml:",chardata"`
- Id string `xml:"id,attr"`
- }
- func (sqlMap *SqlMap) Init() error {
- var err error
- cfg, err := goconfig.LoadConfigFile("./sql/xormcfg.ini")
- if err != nil {
- return err
- }
- var sqlMapRootDir string
- sqlMapRootDir, err = cfg.GetValue("", "sqlMapRootDir")
- if err != nil {
- return err
- }
- sqlMap.Sql = make(map[string]string)
- sqlMap.SqlTemplate = make(map[string]*pongo2.Template)
- err=filepath.Walk(sqlMapRootDir, sqlMap.walkFunc)
- if err!=nil{
- return err
- }
- return nil
- }
- func (sqlMap *SqlMap) walkFunc(path string, info os.FileInfo, err error) error {
- if err!=nil{
- return err
- }
- if info.IsDir() {
- return nil
- }
- if strings.HasSuffix(path, ".xml") {
- err = sqlMap.paresSql(path)
- if err != nil {
- return err
- }
- }
- if strings.HasSuffix(path, ".stpl") {
- err = sqlMap.paresSqlTemplate(info.Name(), path)
- if err != nil {
- return err
- }
- }
- return nil
- }
- func (sqlMap *SqlMap) paresSqlTemplate(filename string, filepath string) error {
- template, err := pongo2.FromFile(filepath)
- if err != nil {
- return err
- }
- sqlMap.SqlTemplate[filename] = template
- return nil
- }
- func (sqlMap *SqlMap) paresSql(filepath string) error {
- content, err := ioutil.ReadFile(filepath)
- if err != nil {
- return err
- }
- var result Result
- err = xml.Unmarshal(content, &result)
- if err != nil {
- return err
- }
- for _, sql := range result.Sql {
- sqlMap.Sql[sql.Id] = sql.Value
- }
- return nil
- }
- func NewOracle(driverName string, dataSourceName string) (*Engine, error) {
- return NewEngine(driverName, dataSourceName)
- }
- func NewMSSQL(driverName string, dataSourceName string) (*Engine, error) {
- return NewEngine(driverName, dataSourceName)
- }
- func NewMySQL(driverName string, dataSourceName string) (*Engine, error) {
- return NewEngine(driverName, dataSourceName)
- }
- func NewPostgreSQL(dataSourceName string) (*Engine, error) {
- return NewEngine(POSTGRESQL_DRIVER, dataSourceName)
- }
- func NewSqlite3(dataSourceName string) (*Engine, error) {
- return NewEngine(SQLITE3_DRIVER, dataSourceName)
- }
- func NewDB(driverName string, dataSourceName string) (*Engine, error) {
- return NewEngine(driverName, dataSourceName)
- }
|