github.com/team-ide/go-dialect@v1.9.20/dialect/mapping.postgresql.go (about)

     1  package dialect
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  )
     8  
     9  func NewMappingPostgresql() (mapping *SqlMapping) {
    10  	mapping = &SqlMapping{
    11  		dialectType: TypePostgresql,
    12  
    13  		OwnerNamePackChar:  "\"",
    14  		TableNamePackChar:  "\"",
    15  		ColumnNamePackChar: "\"",
    16  		SqlValuePackChar:   "'",
    17  		SqlValueEscapeChar: "'",
    18  	}
    19  
    20  	appendPostgresqlSql(mapping)
    21  
    22  	mapping.PackPageSql = func(selectSql string, pageSize int, pageNo int) (pageSql string) {
    23  		pageSql = selectSql + fmt.Sprintf(" LIMIT %d OFFSET %d", pageSize, pageSize*(pageNo-1))
    24  		return
    25  	}
    26  	mapping.ReplaceSqlVariable = func(sqlInfo string, args []interface{}) (variableSql string) {
    27  		strList := strings.Split(sqlInfo, "?")
    28  		if len(strList) < 1 {
    29  			variableSql = sqlInfo
    30  			return
    31  		}
    32  		variableSql = strList[0]
    33  		for i := 1; i < len(strList); i++ {
    34  			variableSql += "$" + strconv.Itoa(i)
    35  			variableSql += strList[i]
    36  		}
    37  		return
    38  	}
    39  
    40  	for _, one := range postgresqlColumnTypeList {
    41  		mapping.AddColumnTypeInfo(one)
    42  	}
    43  
    44  	for _, one := range postgresqlIndexTypeList {
    45  		mapping.AddIndexTypeInfo(one)
    46  	}
    47  
    48  	return
    49  }
    50  
    51  var (
    52  	postgresqlIndexTypeList []*IndexTypeInfo
    53  )
    54  
    55  func appendPostgresqlIndexType(indexType *IndexTypeInfo) {
    56  	postgresqlIndexTypeList = append(postgresqlIndexTypeList, indexType)
    57  }
    58  
    59  func init() {
    60  	appendOpenGaussIndexType(&IndexTypeInfo{Name: "", Format: "INDEX",
    61  		NotSupportDataTypes: []string{"CLOB", "BLOB"},
    62  	})
    63  	appendOpenGaussIndexType(&IndexTypeInfo{Name: "INDEX", Format: "INDEX",
    64  		NotSupportDataTypes: []string{"CLOB", "BLOB"},
    65  	})
    66  	appendOpenGaussIndexType(&IndexTypeInfo{Name: "NORMAL", Format: "INDEX",
    67  		NotSupportDataTypes: []string{"CLOB", "BLOB"},
    68  	})
    69  	appendOpenGaussIndexType(&IndexTypeInfo{Name: "UNIQUE", Format: "UNIQUE",
    70  		NotSupportDataTypes: []string{"CLOB", "BLOB"},
    71  		IndexTypeFormat: func(index *IndexModel) (indexTypeFormat string, err error) {
    72  			indexTypeFormat = "UNIQUE INDEX"
    73  			return
    74  		},
    75  	})
    76  	appendOpenGaussIndexType(&IndexTypeInfo{Name: "FULLTEXT", Format: "FULLTEXT", IsExtend: true,
    77  		IndexTypeFormat: func(index *IndexModel) (indexTypeFormat string, err error) {
    78  			return
    79  		},
    80  	})
    81  	appendOpenGaussIndexType(&IndexTypeInfo{Name: "SPATIAL", Format: "SPATIAL", IsExtend: true,
    82  		IndexTypeFormat: func(index *IndexModel) (indexTypeFormat string, err error) {
    83  			return
    84  		},
    85  	})
    86  
    87  }