Skip to content

Instantly share code, notes, and snippets.

@camsaul
Created June 3, 2022 17:52
Show Gist options
  • Save camsaul/32d5348d7e6904cbdf930e4f0dafb5b0 to your computer and use it in GitHub Desktop.
Save camsaul/32d5348d7e6904cbdf930e4f0dafb5b0 to your computer and use it in GitHub Desktop.
Metabase Query Processor Demo Stuff
(ns metabase.x
(:require [clojure.test :refer :all]
dev.debug-qp
[metabase.models.database :refer [Database]]
[metabase.query-processor :as qp]
[metabase.test :as mt]
[metabase.query-processor.context :as qp.context]
[metabase.query-processor.context.default :as context.default]
[clojure.pprint :as pprint]
[metabase.driver.sql.query-processor :as sql.qp]
[metabase.driver :as driver]
[metabase.util :as u]))
(defn a-query []
(mt/mbql-query venues
{:order-by [[:asc $id]]}))
;; an MBQL query
#_(a-query)
;; back to MBQL shorthand
(defn to-mbql-shorthand []
(dev.debug-qp/to-mbql-shorthand (a-query)))
;; running a query
(defn run-a-query []
(mt/rows
(qp/process-query (a-query))))
;; native query
(deftest native-test []
(mt/with-native-query-testing-context (a-query)
(is (= 1 2))))
;; HoneySQL
#_(mt/set-ns-log-level! 'metabase.driver.sql.query-processor :debug)
(defn ->honeysql []
(mt/with-everything-store
(sql.qp/->honeysql :h2 [:field 203972 nil])))
(defn different-reducing-fn []
(qp/process-query (a-query)
(fn [initial-metadata]
(println "METADATA =>")
(pprint/pprint initial-metadata)
(fn rf
;; initial
([]
0)
;; final
([row-count]
row-count)
;; each row
([row-count _row]
(inc row-count))))
(context.default/default-context)))
(defn process-query-debug []
(dev.debug-qp/process-query-debug (a-query)))
(driver/register! ::my-driver, :parent :h2)
(defmethod driver/execute-reducible-query ::my-driver
[_driver _query _context respond]
(let [metadata {:cols [{:name "X"}
{:name "Y"}]}
rows [[1 2]
[3 4]]]
(future
(Thread/sleep 4000)
(respond metadata rows))))
(defn different-driver []
(mt/with-temp Database [{db-id :id} {:details (:details (mt/db))
:engine ::my-driver}]
(qp/process-query {:database db-id, :type :native, :native {:query "HELLO"}})))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment