Created
June 3, 2022 17:52
-
-
Save camsaul/32d5348d7e6904cbdf930e4f0dafb5b0 to your computer and use it in GitHub Desktop.
Metabase Query Processor Demo Stuff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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