|
@@ -20,6 +20,8 @@ const (
|
|
Order SqlCondition = "Order"
|
|
Order SqlCondition = "Order"
|
|
Delimiter SqlCondition = "Delimiter"
|
|
Delimiter SqlCondition = "Delimiter"
|
|
ConvertColumn SqlCondition = "ConvertColumn"
|
|
ConvertColumn SqlCondition = "ConvertColumn"
|
|
|
|
+
|
|
|
|
+ ToDate SqlCondition = "ToDate"
|
|
)
|
|
)
|
|
|
|
|
|
var TemplateMap = map[SqlCondition]map[Driver]string{
|
|
var TemplateMap = map[SqlCondition]map[Driver]string{
|
|
@@ -31,6 +33,10 @@ var TemplateMap = map[SqlCondition]map[Driver]string{
|
|
MySql: `CONVERT({{.ConvertColumn}} USING gbk )`,
|
|
MySql: `CONVERT({{.ConvertColumn}} USING gbk )`,
|
|
DM: `{{.ConvertColumn}}`,
|
|
DM: `{{.ConvertColumn}}`,
|
|
},
|
|
},
|
|
|
|
+ ToDate: {
|
|
|
|
+ MySql: `DATE({{.Column}})`,
|
|
|
|
+ DM: `TO_DATE({{.Column}})`,
|
|
|
|
+ },
|
|
}
|
|
}
|
|
|
|
|
|
var supportDriverMap = map[string]Driver{
|
|
var supportDriverMap = map[string]Driver{
|
|
@@ -67,6 +73,71 @@ func (distinctParam *DistinctParam) GetFormatConditionStr(param *QueryParam) str
|
|
return ""
|
|
return ""
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+type ToDateParam struct {
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (toDateParam *ToDateParam) GetParamName() string {
|
|
|
|
+ return "ToDate"
|
|
|
|
+}
|
|
|
|
+func (toDateParam *ToDateParam) GetFormatConditionStr(param *QueryParam) (sql string) {
|
|
|
|
+ dbDriver, _ := getDriverInstance(param.Driver)
|
|
|
|
+ if param.Column == "" {
|
|
|
|
+ FileLog.Error("聚合字段为空,无法生成聚合sql")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ var templateSqlStr string
|
|
|
|
+ if _, ok := TemplateMap[ToDate][dbDriver]; !ok {
|
|
|
|
+ templateSqlStr = TemplateMap[ToDate][MySql]
|
|
|
|
+ } else {
|
|
|
|
+ templateSqlStr = TemplateMap[ToDate][dbDriver]
|
|
|
|
+ }
|
|
|
|
+ if templateSqlStr == "" {
|
|
|
|
+ FileLog.Error("聚合sql模板不存在,无法生成聚合sql")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ templateSql, err := template.New("ToDate").Parse(templateSqlStr)
|
|
|
|
+ if err != nil {
|
|
|
|
+ FileLog.Error("failed to parse template: %v", err)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ //反射获取结构体的值
|
|
|
|
+ value := reflect.ValueOf(param)
|
|
|
|
+ // 检查是否是指针
|
|
|
|
+ if value.Kind() != reflect.Ptr {
|
|
|
|
+ fmt.Println("请求参数必须是一个结构体")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // 获取结构体的元素
|
|
|
|
+ elem := value.Elem()
|
|
|
|
+ // 检查是否是结构体
|
|
|
|
+ if elem.Kind() != reflect.Struct {
|
|
|
|
+ fmt.Println("请求参数必须是一个结构体")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // 获取字段的值
|
|
|
|
+ fieldValue := elem.FieldByName("ConvertColumn")
|
|
|
|
+ // 检查字段是否存在
|
|
|
|
+ if !fieldValue.IsValid() {
|
|
|
|
+ fmt.Printf("Error: field %s not found\n", "ConvertColumn")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // 检查字段是否可导出
|
|
|
|
+ if !fieldValue.CanSet() {
|
|
|
|
+ fmt.Printf("Error: field %s is not exported and cannot be set\n", "ConvertColumn")
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // 渲染模板
|
|
|
|
+ var buf bytes.Buffer
|
|
|
|
+ err = templateSql.Execute(&buf, param)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Sprintf("执行模板填充失败: %v", err)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ sql = buf.String()
|
|
|
|
+ fmt.Printf("生成的转换日期语句为:%s\n", sql)
|
|
|
|
+ return sql
|
|
|
|
+}
|
|
|
|
+
|
|
type ConvertParam struct {
|
|
type ConvertParam struct {
|
|
}
|
|
}
|
|
|
|
|
|
@@ -145,6 +216,7 @@ var sqlGeneratorFactory = map[SqlCondition]SqlParam{
|
|
Delimiter: &DelimiterParam{},
|
|
Delimiter: &DelimiterParam{},
|
|
Distinct: &DistinctParam{},
|
|
Distinct: &DistinctParam{},
|
|
ConvertColumn: &ConvertParam{},
|
|
ConvertColumn: &ConvertParam{},
|
|
|
|
+ ToDate: &ToDateParam{},
|
|
}
|
|
}
|
|
|
|
|
|
type DelimiterParam struct {
|
|
type DelimiterParam struct {
|