Skip to content
Snippets Groups Projects
Commit 5ed746ac authored by Allen Gilliland's avatar Allen Gilliland
Browse files

attach segments to a Table.

parent 1909ff50
No related branches found
No related tags found
No related merge requests found
databaseChangeLog:
- changeSet:
id: 20
id: 21
author: agilliland
changes:
- createTable:
......@@ -13,6 +13,15 @@ databaseChangeLog:
constraints:
primaryKey: true
nullable: false
- column:
name: table_id
type: int
constraints:
nullable: false
references: metabase_table(id)
foreignKeyName: fk_segment_ref_table_id
deferrable: false
initiallyDeferred: false
- column:
name: creator_id
type: int
......@@ -53,6 +62,12 @@ databaseChangeLog:
columns:
column:
name: creator_id
- createIndex:
tableName: segment
indexName: idx_segment_table_id
columns:
column:
name: table_id
- modifySql:
dbms: postgresql
replace:
......
......@@ -82,11 +82,13 @@
"Create a new `Segment`.
Returns the newly created `Segment` or throws an Exception."
[name description creator-id definition]
{:pre [(string? name)
[table-id name description creator-id definition]
{:pre [(integer? table-id)
(string? name)
(integer? creator-id)
(map? definition)]}
(-> (db/ins Segment
:table_id table-id
:creator_id creator-id
:name name
:description description
......
......@@ -5,7 +5,8 @@
[database :as db]
[field :refer [Field]]
[field-values :refer [FieldValues]]
[interface :refer :all])
[interface :refer :all]
[segment :refer [Segment]])
[metabase.util :as u]))
(def ^:const entity-types
......@@ -50,6 +51,7 @@
(merge defaults table)))
(pre-cascade-delete [_ {:keys [id] :as table}]
(cascade-delete Segment :table_id id)
(cascade-delete Field :table_id id)))
(extend-ICanReadWrite TableEntity :read :always, :write :superuser)
......@@ -2,8 +2,10 @@
(:require [clojure.tools.macro :refer [symbol-macrolet]]
[expectations :refer :all]
[metabase.db :as db]
(metabase.models [hydrate :refer :all]
[segment :refer :all])
(metabase.models [database :refer [Database]]
[hydrate :refer :all]
[segment :refer :all]
[table :refer [Table]])
[metabase.test.data :refer :all]
[metabase.test.data.users :refer :all]
[metabase.test.util :as tu]))
......@@ -14,17 +16,17 @@
(dissoc :date_joined :last_login)))
(defn create-segment-then-select
[name description creator definition]
(let [{:keys [creator] :as segment} (create-segment name description creator definition)]
[table name description creator definition]
(let [{:keys [creator] :as segment} (create-segment table name description creator definition)]
(-> segment
(dissoc :id :created_at :updated_at)
(dissoc :id :table_id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login)))))
(defn update-segment-then-select
[segment message]
(let [{:keys [creator] :as segment} (update-segment segment message)]
(-> segment
(dissoc :id :created_at :updated_at)
(dissoc :id :table_id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login)))))
......@@ -35,7 +37,14 @@
:name "I only want *these* things"
:description nil
:definition {:clause ["a" "b"]}}
(create-segment-then-select "I only want *these* things" nil (user->id :rasta) {:clause ["a" "b"]}))
(tu/with-temp Database [{database-id :id} {:name "Hillbilly"
:engine :yeehaw
:details {}
:is_sample false}]
(tu/with-temp Table [{:keys [id]} {:name "Stuff"
:db_id database-id
:active true}]
(create-segment-then-select id "I only want *these* things" nil (user->id :rasta) {:clause ["a" "b"]}))))
;; retrieve-segment
......@@ -47,15 +56,23 @@
:description "All the glorious things..."
:definition {:database 45
:query {:filter ["yay"]}}}
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta)
:name "Ivory Tower"
:description "All the glorious things..."
:definition {:database 45
:query {:filter ["yay"]}}}]
(let [{:keys [creator] :as segment} (retrieve-segment id)]
(-> segment
(dissoc :id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login))))))
(tu/with-temp Database [{database-id :id} {:name "Hillbilly"
:engine :yeehaw
:details {}
:is_sample false}]
(tu/with-temp Table [{:keys [id]} {:name "Stuff"
:db_id database-id
:active true}]
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta)
:table_id id
:name "Ivory Tower"
:description "All the glorious things..."
:definition {:database 45
:query {:filter ["yay"]}}}]
(let [{:keys [creator] :as segment} (retrieve-segment id)]
(-> segment
(dissoc :id :table_id :created_at :updated_at)
(assoc :creator (dissoc creator :date_joined :last_login))))))))
;; update-segment
......@@ -73,13 +90,22 @@
:description nil
:definition {:database 2
:query {:filter ["not" "the droids you're looking for"]}}}
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta)
:name "Droids in the desert"
:description "Lookin' for a jedi"
:definition {}}]
(update-segment-then-select {:id id
:name "Tatooine"
:description nil
:creator_id (user->id :crowberto)
:definition {:database 2
:query {:filter ["not" "the droids you're looking for"]}}} "Just horsing around")))
(tu/with-temp Database [{database-id :id} {:name "Hillbilly"
:engine :yeehaw
:details {}
:is_sample false}]
(tu/with-temp Table [{:keys [id]} {:name "Stuff"
:db_id database-id
:active true}]
(tu/with-temp Segment [{:keys [id]} {:creator_id (user->id :rasta)
:table_id id
:name "Droids in the desert"
:description "Lookin' for a jedi"
:definition {}}]
(update-segment-then-select {:id id
:name "Tatooine"
:description nil
:creator_id (user->id :crowberto)
:table_id 456
:definition {:database 2
:query {:filter ["not" "the droids you're looking for"]}}} "Just horsing around")))))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment