summaryrefslogtreecommitdiffstats
path: root/store
diff options
context:
space:
mode:
Diffstat (limited to 'store')
-rw-r--r--store/sqlstore/post_store.go38
1 files changed, 37 insertions, 1 deletions
diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go
index 90db80796..14a6039bc 100644
--- a/store/sqlstore/post_store.go
+++ b/store/sqlstore/post_store.go
@@ -783,7 +783,7 @@ func (s *SqlPostStore) Search(teamId string, userId string, params *model.Search
termMap := map[string]bool{}
terms := params.Terms
- if terms == "" && len(params.InChannels) == 0 && len(params.FromUsers) == 0 {
+ if terms == "" && len(params.InChannels) == 0 && len(params.FromUsers) == 0 && len(params.OnDate) == 0 && len(params.AfterDate) == 0 && len(params.BeforeDate) == 0 {
result.Data = []*model.Post{}
return
}
@@ -829,6 +829,7 @@ func (s *SqlPostStore) Search(teamId string, userId string, params *model.Search
AND UserId = :UserId
` + deletedQueryPart + `
CHANNEL_FILTER)
+ CREATEDATE_CLAUSE
SEARCH_CLAUSE
ORDER BY CreateAt DESC
LIMIT 100`
@@ -889,6 +890,41 @@ func (s *SqlPostStore) Search(teamId string, userId string, params *model.Search
searchQuery = strings.Replace(searchQuery, "POST_FILTER", "", 1)
}
+ // handle after: before: on: filters
+ if len(params.AfterDate) > 1 || len(params.BeforeDate) > 1 || len(params.OnDate) > 1 {
+ if len(params.OnDate) > 1 {
+ onDateStart, onDateEnd := params.GetOnDateMillis()
+ queryParams["OnDateStart"] = strconv.FormatInt(onDateStart, 10)
+ queryParams["OnDateEnd"] = strconv.FormatInt(onDateEnd, 10)
+
+ // between `on date` start of day and end of day
+ searchQuery = strings.Replace(searchQuery, "CREATEDATE_CLAUSE", "AND CreateAt BETWEEN :OnDateStart AND :OnDateEnd ", 1)
+ } else if len(params.AfterDate) > 1 && len(params.BeforeDate) > 1 {
+ afterDate := params.GetAfterDateMillis()
+ beforeDate := params.GetBeforeDateMillis()
+ queryParams["OnDateStart"] = strconv.FormatInt(afterDate, 10)
+ queryParams["OnDateEnd"] = strconv.FormatInt(beforeDate, 10)
+
+ // between clause
+ searchQuery = strings.Replace(searchQuery, "CREATEDATE_CLAUSE", "AND CreateAt BETWEEN :OnDateStart AND :OnDateEnd ", 1)
+ } else if len(params.AfterDate) > 1 {
+ afterDate := params.GetAfterDateMillis()
+ queryParams["AfterDate"] = strconv.FormatInt(afterDate, 10)
+
+ // greater than `after date`
+ searchQuery = strings.Replace(searchQuery, "CREATEDATE_CLAUSE", "AND CreateAt >= :AfterDate ", 1)
+ } else if len(params.BeforeDate) > 1 {
+ beforeDate := params.GetBeforeDateMillis()
+ queryParams["BeforeDate"] = strconv.FormatInt(beforeDate, 10)
+
+ // less than `before date`
+ searchQuery = strings.Replace(searchQuery, "CREATEDATE_CLAUSE", "AND CreateAt <= :BeforeDate ", 1)
+ }
+ } else {
+ // no create date filters set
+ searchQuery = strings.Replace(searchQuery, "CREATEDATE_CLAUSE", "", 1)
+ }
+
if terms == "" {
// we've already confirmed that we have a channel or user to search for
searchQuery = strings.Replace(searchQuery, "SEARCH_CLAUSE", "", 1)