diff --git a/src/metabase/driver/druid/query_processor.clj b/src/metabase/driver/druid/query_processor.clj index 7ec2887b4fc640deb8b0540d77b50901a5bac52c..8befd598664fa16eb7084a10eafe76a478045cd7 100644 --- a/src/metabase/driver/druid/query_processor.clj +++ b/src/metabase/driver/druid/query_processor.clj @@ -577,15 +577,16 @@ {:dimension (->rvalue field) :direction direction})))) -(defmethod handle-order-by ::grouped-timeseries [_ {[breakout-field] :breakout, [{field :field, direction :direction}] :order-by} druid-query] - (let [field (->rvalue field) - breakout-field (->rvalue breakout-field) - sort-by-breakout? (= field breakout-field)] - (if (and sort-by-breakout? - (= direction :descending)) - (assoc druid-query :descending true) - druid-query))) +;; Handle order by timstamp field +(defn- handle-order-by-timestamp [field direction druid-query] + (assoc druid-query :descending (and (instance? DateTimeField field) + (= direction :descending)))) + +(defmethod handle-order-by ::grouped-timeseries [_ {[{field :field, direction :direction}] :order-by} druid-query] + (handle-order-by-timestamp field direction druid-query)) +(defmethod handle-order-by ::select [_ {[{field :field, direction :direction}] :order-by} druid-query] + (handle-order-by-timestamp field direction druid-query)) ;;; ### handle-fields diff --git a/test/metabase/timeseries_query_processor_test.clj b/test/metabase/timeseries_query_processor_test.clj index 81f48c2ed9db80654346434781a68d95975b2529..50765b41ab1df0e3fea23515c7eac14062e67a29 100644 --- a/test/metabase/timeseries_query_processor_test.clj +++ b/test/metabase/timeseries_query_processor_test.clj @@ -69,6 +69,44 @@ (data (data/run-query checkins (ql/limit 2)))) +;;; "bare rows" query, limit, order-by timestamp desc +(expect-with-timeseries-dbs + {:columns ["id" + "timestamp" + "count" + "user_last_login" + "user_name" + "venue_category_name" + "venue_latitude" + "venue_longitude" + "venue_name" + "venue_price"] + :rows [["693", "2015-12-29T08:00:00.000Z", 1, "2014-07-03T19:30:00.000Z", "Frans Hevel", "Mexican", "34.0489", "-118.238", "Señor Fish", "2"] + ["570", "2015-12-26T08:00:00.000Z", 1, "2014-07-03T01:30:00.000Z", "Kfir Caj", "Chinese", "37.7949", "-122.406", "Empress of China", "3"]]} + (data (data/run-query checkins + (ql/order-by (ql/desc $timestamp)) + (ql/limit 2)))) + +;;; "bare rows" query, limit, order-by timestamp asc +(expect-with-timeseries-dbs + {:columns ["id" + "timestamp" + "count" + "user_last_login" + "user_name" + "venue_category_name" + "venue_latitude" + "venue_longitude" + "venue_name" + "venue_price"] + :rows [["931", "2013-01-03T08:00:00.000Z", 1, "2014-01-01T08:30:00.000Z", "Simcha Yan", "Thai", "34.094", "-118.344", "Kinaree Thai Bistro", "1"] + ["285", "2013-01-10T08:00:00.000Z", 1, "2014-07-03T01:30:00.000Z", "Kfir Caj", "Thai", "34.1021", "-118.306", "Ruen Pair Thai Restaurant", "2"]]} + (data (data/run-query checkins + (ql/order-by (ql/asc $timestamp)) + (ql/limit 2)))) + + + ;;; fields clause (expect-with-timeseries-dbs {:columns ["venue_name" "venue_category_name" "timestamp"], @@ -78,6 +116,28 @@ (ql/fields $venue_name $venue_category_name) (ql/limit 2)))) +;;; fields clause, order by timestamp asc +(expect-with-timeseries-dbs + {:columns ["venue_name" "venue_category_name" "timestamp"], + :rows [["Kinaree Thai Bistro" "Thai" "2013-01-03T08:00:00.000Z"] + ["Ruen Pair Thai Restaurant" "Thai" "2013-01-10T08:00:00.000Z"]]} + (data (data/run-query checkins + (ql/fields $venue_name $venue_category_name) + (ql/order-by (ql/asc $timestamp)) + (ql/limit 2)))) + +;;; fields clause, order by timestamp desc +(expect-with-timeseries-dbs + {:columns ["venue_name" "venue_category_name" "timestamp"], + :rows [["Señor Fish" "Mexican" "2015-12-29T08:00:00.000Z"] + ["Empress of China" "Chinese" "2015-12-26T08:00:00.000Z"]]} + (data (data/run-query checkins + (ql/fields $venue_name $venue_category_name) + (ql/order-by (ql/desc $timestamp)) + (ql/limit 2)))) + + + ;;; count (expect-with-timeseries-dbs [1000]