正在显示
2 个修改的文件
包含
82 行增加
和
4 行删除
| @@ -38,7 +38,7 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | @@ -38,7 +38,7 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | ||
| 38 | cacheMiss = true | 38 | cacheMiss = true |
| 39 | } | 39 | } |
| 40 | } | 40 | } |
| 41 | - response := &dto.TablePreviewDto{HiddenData: cmd.HiddenData} | 41 | + response := &dto.TablePreviewDto{HiddenData: cmd.HiddenData, TableType: table.TableType, Name: table.Name, TableId: table.TableId} |
| 42 | if dataTable == nil { | 42 | if dataTable == nil { |
| 43 | switch table.TableType { | 43 | switch table.TableType { |
| 44 | case domain.CalculateSet.ToString(): | 44 | case domain.CalculateSet.ToString(): |
| @@ -52,8 +52,9 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | @@ -52,8 +52,9 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | ||
| 52 | if err != nil { | 52 | if err != nil { |
| 53 | return nil, factory.FastError(err) | 53 | return nil, factory.FastError(err) |
| 54 | } | 54 | } |
| 55 | + data, total := dataTable.FilterByWhere(cmd.Where) | ||
| 55 | response.Fields = dataTable.Fields | 56 | response.Fields = dataTable.Fields |
| 56 | - response.Data = domain.GripData(domain.ToFieldData(dataTable.Fields, pageData(cmd.Where.PageNumber, cmd.Where.PageSize, dataTable.Data), false), int64(len(dataTable.Data))) | 57 | + response.Data = domain.GripData(domain.ToFieldData(dataTable.Fields, data, false), total) |
| 57 | default: | 58 | default: |
| 58 | var options = starrocks.QueryOptions{ | 59 | var options = starrocks.QueryOptions{ |
| 59 | Table: table, | 60 | Table: table, |
| @@ -76,8 +77,9 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | @@ -76,8 +77,9 @@ func (tableService *TableService) TablePreview(ctx *domain.Context, cmd *command | ||
| 76 | } else { | 77 | } else { |
| 77 | switch table.TableType { | 78 | switch table.TableType { |
| 78 | case domain.CalculateSet.ToString(): | 79 | case domain.CalculateSet.ToString(): |
| 80 | + data, total := dataTable.FilterByWhere(cmd.Where) | ||
| 79 | response.Fields = dataTable.Fields | 81 | response.Fields = dataTable.Fields |
| 80 | - response.Data = domain.GripData(domain.ToFieldData(dataTable.Fields, pageData(cmd.Where.PageNumber, cmd.Where.PageSize, dataTable.Data), false), int64(len(dataTable.Data))) | 82 | + response.Data = domain.GripData(domain.ToFieldData(dataTable.Fields, data, false), total) |
| 81 | default: | 83 | default: |
| 82 | response.Load(table, dataTable, domain.ObjectMetaTable) | 84 | response.Load(table, dataTable, domain.ObjectMetaTable) |
| 83 | } | 85 | } |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | -import "strings" | 3 | +import ( |
| 4 | + "strings" | ||
| 5 | +) | ||
| 4 | 6 | ||
| 5 | type DataTable struct { | 7 | type DataTable struct { |
| 6 | Fields []*Field `json:"fields"` | 8 | Fields []*Field `json:"fields"` |
| @@ -113,7 +115,81 @@ func (t *DataTable) MatchFields(from []*Field) []*Field { | @@ -113,7 +115,81 @@ func (t *DataTable) MatchFields(from []*Field) []*Field { | ||
| 113 | return from | 115 | return from |
| 114 | } | 116 | } |
| 115 | 117 | ||
| 118 | +func (t *DataTable) FilterByWhere(where Where) (response [][]string, length int64) { | ||
| 119 | + pageNumber, pageSize := where.PageNumber, where.PageSize | ||
| 120 | + response = make([][]string, 0) | ||
| 121 | + wrapperFilters := func(data []string, next ...func([]string) bool) ([]string, bool) { | ||
| 122 | + ok := true | ||
| 123 | + for i := range next { | ||
| 124 | + if !next[i](data) { | ||
| 125 | + ok = false | ||
| 126 | + } | ||
| 127 | + if !ok { | ||
| 128 | + break | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + if !ok { | ||
| 132 | + return nil, false | ||
| 133 | + } | ||
| 134 | + return data, true | ||
| 135 | + } | ||
| 136 | + filterFuncList := make([]func([]string) bool, 0) | ||
| 137 | + for _, c := range where.Conditions { | ||
| 138 | + var index = 0 | ||
| 139 | + var filed *Field | ||
| 140 | + for i, f := range t.Fields { | ||
| 141 | + if f.Name == c.Field.Name { | ||
| 142 | + index = i | ||
| 143 | + filed = f | ||
| 144 | + break | ||
| 145 | + } | ||
| 146 | + } | ||
| 147 | + if filed == nil { | ||
| 148 | + continue | ||
| 149 | + } | ||
| 150 | + if len(c.In) > 0 { | ||
| 151 | + filterFuncList = append(filterFuncList, WithInFilter(c.In, index)) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + for _, data := range t.Data { | ||
| 155 | + if v, ok := wrapperFilters(data, filterFuncList...); ok { | ||
| 156 | + response = append(response, v) | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + length = int64(len(response)) | ||
| 160 | + response = pageData(pageNumber, pageSize, response) | ||
| 161 | + return | ||
| 162 | +} | ||
| 163 | + | ||
| 116 | type RangStruct struct { | 164 | type RangStruct struct { |
| 117 | Op string `json:"op"` | 165 | Op string `json:"op"` |
| 118 | Val interface{} `json:"val"` | 166 | Val interface{} `json:"val"` |
| 119 | } | 167 | } |
| 168 | + | ||
| 169 | +func pageData(pageNumber, pageSize int, data [][]string) [][]string { | ||
| 170 | + if pageNumber == 0 || pageSize == 0 { | ||
| 171 | + return data | ||
| 172 | + } | ||
| 173 | + offset := (pageNumber - 1) * pageSize | ||
| 174 | + if len(data) < offset { | ||
| 175 | + return [][]string{} | ||
| 176 | + } | ||
| 177 | + if len(data) < offset+pageSize { | ||
| 178 | + pageSize = len(data) - offset | ||
| 179 | + } | ||
| 180 | + return data[offset : offset+pageSize] | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +func WithInFilter(in []interface{}, index int) func(data []string) bool { | ||
| 184 | + return func(data []string) bool { | ||
| 185 | + if len(data) < index { | ||
| 186 | + return false | ||
| 187 | + } | ||
| 188 | + for _, item := range in { | ||
| 189 | + if data[index] == item.(string) { | ||
| 190 | + return true | ||
| 191 | + } | ||
| 192 | + } | ||
| 193 | + return false | ||
| 194 | + } | ||
| 195 | +} |
-
请 注册 或 登录 后发表评论