this doesn't make a ton of sense in the current world where there's only
one way to route a db. But in the future, when you want to delete a
database, you don't care about how a db was routed; tear it all down and
delete all routers, all children, and then the database.
* add-alias-info => MLv2
* Restore deleted test
* WIP
* WIP [ci skip]
* Ensure we're actually using a cached metadata provider in tests
* Remove profiling code
* Restore accidentally-deleted `native-query-snippet` fn
* Fix accidental edits
* Make `visible-columns` stage-only
* More minor caching improvements
* cljfmt & kondo
* More minor caching improvements
* Fix#35252
* cljfmt & kondo
* Another round of test fixes and lint fixes 🔧
* Test fixes 🔧
* Test fix 🔧
* PR feedback
* Test & Lint fixes 🔧
* Test fix 🔧
* Kondo/cljfmt
* Appease Eastwood
* cljfmt run against everything
* Revert changes to deps.edn
* Did I fixx??
* cljfmt/kondo
* Fix Oracle test failure
* Fix nested fields (MongoDB)
* cljfmt
* Nested column name fixes
* Fix Mongo for reals
* Revert BigQuery breaking stuff
* Fix equality for binned columns
* Test fix 🔧
* Remove dead :ident keys
* Fix is_verified field refs
* Fix is_verified field refs
* Some sanity checking
* Fix typo
* Fixx
* Ok, don't be super fussy about bad code using :type/Text as a parameter
* Fix validation of legacy expression refs inside stage parameters
* Fix aggregation names not being deduplicated
* :as-alias
* replace saigon with bangkok
* use ho chi minh as equivalent replacement
* use bangkok for sqlserver
* update us/pacific to america/los_angeles
* Test debugging
* Fix debugging
* Test fixes 🔧
* Fix busted hardcoded e2e query and add disallowed-keys helper
* cljfmt
* Update deprecation notices 56 => 57
* Kick the can down the road
* Fix another busted test 🔧
* Improve field resolution even more 😒
* cljfmt
* Fix sandboxing with bad field refs.
* Ok I give up I guess I just accidentally fixed sandboxing with custom columns
* cljfmt
* I fixed it
* Appease the linter
* Test fixes 🔧
* OOOPS
* Fix test
* prettier
---------
Co-authored-by: Riley Thompson <rileythompson99@gmail.com>
* UI for metabot feedback
* copy and spacing tweaks (#62049)
* switch to download based approach
* test
---------
Co-authored-by: Maz Ameli <maz@metabase.com>
* BOT-285: ensure field statistics are populated
* chore: test
* extend field-values treatment to dummy tools
* no more need for ensure-field-values!
* chore: use get-or-create
* style
* remove unused require
* fix
* nil safety
* extract
* wip
* wip2
* fix and wip
* wip
* fiiiix
* use the component name inside the iframe
* fix tests
* use custom elements attributes in the preview
* clean up
* clean up
* merge question with new question in the iframe code
* remove SdkIframeEmbedTagSettings
* styles -> S
* restore defaultTheme functionality that was merged on master
* fix test, now the iframe is not reset and we don't need to select the table again
* Fix containerize job to only run when uberjar succeeds
The containerize job now properly checks that the uberjar job succeeded
before attempting to containerize. This prevents containerization from
being triggered on documentation-only changes where the uberjar job
is skipped.
Added: needs.uberjar.result == 'success' condition
* Set default output name for fetched artifacts to "metabase.jar"
- Add :database-feature to SettingDefinition schema to specify required driver features
- Update validate-settable-for-db\! to check database driver feature support
- Add validation to ensure :database-feature is only used with database-local settings
- Fix validation logic to throw when driver does NOT support required feature
- Add comprehensive tests for database feature validation
- Update defsetting macro documentation with :database-feature option
This allows database-local settings like database-enable-actions and
database-enable-table-editing to require specific driver features
(e.g. :actions, :actions/data-editing) before they can be enabled.
* Fix uberjar containerization and implement flexible fetch-artifact action
Resolves issues where uberjars weren't getting containerized when adding the
build-docker-uberjar label to PRs or when manually dispatching workflows.
Major changes:
- Create containerize-uberjar.yml workflow for centralized containerization logic
- Create uberjar-containerize-labeled.yml for PR label-triggered builds
- Extract containerization from uberjar.yml to avoid 3-level workflow nesting
- Add containerization to run-tests.yml for master branch pushes
- Implement flexible extract-path parameter in fetch-artifact action
- Replace preserve-structure boolean with string-based path specification
- Update all workflows to use appropriate extract-path values
The fetch-artifact action now supports:
- extract-path: "." (current directory with custom output-name)
- extract-path: "target/uberjar" (maintains original structure)
- extract-path: "custom/path" (any directory structure)
Containerization now works in all scenarios:
- Master push/merge → run-tests.yml → containerize-uberjar.yml
- PR with build-docker-uberjar label → uberjar-containerize-labeled.yml
- Manual dispatch → containerize-uberjar.yml
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix fetch-artifact action to avoid moving file to itself
Prevents "mv: source and destination are the same file" error when
extract-path matches the existing jar location (e.g. target/uberjar).
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Refactor fetch-artifact action to be more DRY
- Consolidate JAR path logic into a single function
- Export JAR_PATH to GITHUB_ENV for use in subsequent steps
- Remove repetitive path determination code
- Reduce lines of code from 113 to 108
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add Docker Hub link and pull command to PR comment
Enhanced the PR comment after containerization to include:
- Docker tag name (branch with slashes replaced by dashes)
- Direct link to Docker Hub repository tag page
- Ready-to-use docker pull command
This makes it easier for developers to find and pull the built image.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add get-docker-info action and update workflows to utilize it for Docker image retrieval
* Refactor post-comment job to streamline Docker info retrieval and PR comment posting in containerize workflow
* Remove unnecessary blank lines in fetch-artifact and get-docker-info actions for cleaner code
* Update containerize job conditions to trigger on pull request labels for Docker builds
* revert using fetch-artifact for release artifacts
* add migration
* add table before update to correctly set deactivated_at
* no need for schema
* archive tables
* tests
* note
* include active to index
* guard against nil changes
* doc
* guard against archival
* note
* prper count
* serdes/test
* extra safety guard
* more accurate logging
* use epocSecond
* more error validation
* change suffix
* add rollback mig
* move migrations to v56
* safer
* test(embed-js): migrate tests to use custom element api
* use CreateApiKeyResponse
* Update e2e/test/scenarios/embedding/sdk-iframe-embedding/sdk-iframe-embedding.cy.spec.ts
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: Phoomparin Mano <poom@metabase.com>
Cards created before v0.55 lack the `:card_schema` field in their revision history. When loading these old revisions, the system throws "Cannot SELECT a Card without including :card_schema" because the Card model's `after-select` expects this field to always be present.
Existing code adds the legacy default `card_schema` value (20) in `revert-to-revision!`. This PR adds the value (20) to old revisions in `revision.clj`'s `after-select`.
This allows users to view revision history and revert cards that were created before the v0.55 upgrade.
* Updates the info and info_filled icons
* use currentcolor fill instead
* remove fixed width and height and rely on viewBox
* tweak svg paths slightly
* fix y position
---------
Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
Co-authored-by: Maz Ameli <maz@metabase.com>
* Ensure we're actually using a cached metadata provider in tests
* Remove profiling code
* Restore accidentally-deleted `native-query-snippet` fn
* Fix accidental edits
* Fix metadata calculation for joins that contain joins
* All Lib tests are passing
* The PR that fixes everything [WIP] [ci skip]
* Test fix 🔧
* Sort namespaces
* Docstring formatting
* [Lib tests] 100 failures, 33 errors.
* [Lib] 98 failures, 24 errors.
* [Lib] 76 failures, 17 errors.
* [Lib] 49 failures, 4 errors
* [Lib] 46 failures, 2 errors.
* [Lib] 15 failures, 0 errors.
* [Lib] 13 failures, 0 errors.
* All Lib tests passing
* [QP tests] 2 failures, 1 error.
* Revert :encode/cache-key
* Minor caching performance improvements
* Fix nest breakouts/cumulative aggregations
* Add some more stuff to lib.core
* Test fixes/cljfmt/kondo
* Test fix 🔧
* Test fixes and fix some busted tests
* OMG CACHE SO MUCH FASTER!!!!!
* Fix MongoDB
* Fix tests and support mock segments
* Code cleanup and test fixes 🔧
* Test fix 🔧
* Fix set versus map
* PR feedback
* cljfmt
* More PR feedback and tighten up the field resolution code a bit
* Some schema cleanup
* PR feedback
* PR feedback
* Add TODO
* PR feedback
* Remove implementation of join `visible-columns` which is the same as :default
* Remove unused Card visible columns
* Restore the Card implementation of visible columns in THIS PR.
Missed this from the big remerge, where login attributes were being
reset to an empty value on jwt login. Also fixed not including the
jwt-group-sync on the initial formik state.
* Added to_session endpoint
* Added to_session endpoint
* Added to_session endpoint
* Added to_session endpoint
* Added to_session endpoint
* Some small cleanup
- remove unnecessary try/catch clauses
- rename/rework unnecessary public wrapper fn
- make `jwt` required for the endpoint
- only return session token, not any JWT data
* Test fixes
---------
Co-authored-by: John Swanson <john.swanson@metabase.com>
* wip: add connection string form prefill feature;
add tests
* Refactor deprecated export format
* Skip jdbc:prefix when parsing
* Add snowflake support
* Add success message
* Add a feedback message when pasting a connection string
* Refactor field mapping
* wip use regexes to parse connection strings
* make port optional
* Add snowflake
* Add bigquery and clickhouse
* Add Athena support
* Add Amazon Redshift
* Improve clickhouse
* Add failure message
* Add databricks and druid
* Add MySQL
* Add presto
* Adapt snowflake, create objectToString helper
* Add Apache Spark
* Add SQL server
* Add Oracle
* Add Starburst
* Add vertica
* Reset connection string input on change of key
* Map only when select db and protocol matches
* Fix and refactor semicolon params parsing
* Add tracking to database string uri parsing
* create mapping config with placeholders
use placeholders also in tests
* Create engineKeys types
* Create Cypress paste command using synthetic react events
* Use fade transition for feedback animation
* Add e2e tests for connection strings form filling
* fill in display name from connection string
* Add succes failure text test
* Validate form after filling in fields
* Use more standard fallback for paste
* Remove unused regex parsing implementation
* use mass setFields for fomik setting values
* Add test case for clearing existing values, including engine select field
* Fix form fields being overwritten when pasting connection string
* Add onPaste behavior and use simpler paste mechanism in Cypress
* Fix typo
* Extract and use engineKey type and isEngineKey guard
* Make connection string field controlled by formik
Fix submit values
Fix type error
* Remove unneeded prop justify
* Run regex just for currently selected db
* Fix naming of the test file
* Add e2e db connection test
* Fix missing path in th rspack emedding setup
* Explain why connection string is not sent to BE
* use pojo instead of map for db engines config
* Revert to * export to maintain consistency
* fix connection string test
* create a more meaningful type name
* Add result_metadata perms check to qp
* Check result metadata view data on card put
* Throw the exception
* Test
* Add perm check for ad-hoc referencing cards
* Docstrings
* Use seq
* Order of checks
* Apply suggestions from code review
Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
* Simplify into
---------
Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
* add table link to metadata page
* Table
* Add a e2e test
* Add a e2e test
---------
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
When streaming data for a query, we were only including columns if a)
the viz settings for the column were completely empty, or if b) the viz
settings for the columns included specifically enabling that column.
The problem occurs most clearly for things like native SQL queries.
If you construct a query like
```
SELECT id FROM venues;
```
and then set the column viz settings to *something* non-empty (most easy
way: just hide the `id` column and then show it again), and then save
the card, then change the query to:
```
SELECT id, name FROM venues;
```
then if you download the CSV for this card (even after saving it!)
you'll get a result that only contains `id` and not `name`.
A few tests needed to change here because they were implicitly assuming
the old behavior, but I don't think that's entirely intentional. This
behavior was different than the behavior in the Metabase application
proper, where UI results would show all the columns (in the above
example, they'd immediately show `id` *and* `name`).
* jwt edits
* Optimized 2 images, saved 188.8 KB (46.0% smaller)
* why are y'all 'waiting for the status to be reported'
---------
Co-authored-by: Metabase Automation <github-automation@metabase.com>
* Create Upsell CTA component
* Replace pro labe with gem in embed upsell
* Create and use UpsellCta in Embedding Upsell
* Rebuiltd the logic for showing links and upsells in embedding modal
* Add UpsellCta tests
* Remove unneeded hook
Fix test and URL rendering for hosted
* Remove unneeded hook useInteractiveEmbeddingCta
* Fix test not running in target build (OSS)
* Fix embedded modal ee end premium cloud tests
* Add missing translation tag
* Use single upsellcta styling
* feat: promote uberjar as the single uberjar creation workflow
* chore: remove useless reuse-existing-artifacts
* refactor: streamline PR environment workflow by removing wait_for_uberjar input and simplifying uberjar retrieval
* fix: ensure default editions are used if container info retrieval fails
* chore: don't build uberjar outside of run-tests
* fix: update uberjar artifact name to use the current SHA instead of PR head SHA
* fix: update uberjar artifact names to use PR head SHA when available
* fix: update uberjar workflow to simplify input parameters and improve conditional checks
* fix: add concurrency settings to uberjar workflow
* fix: update documentation condition in run-tests workflow
* fix: add default node version
* fix: update conditions for container info retrieval and containerization steps
* fix: update default node version to 22 in uberjar workflow
* Update .github/workflows/uberjar.yml
* Update .github/workflows/uberjar.yml
---------
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
was blocking on startup
stacktrace below is representative. has a few other things like reveal
but shows that we get into a huge loop over all cards and you end up
waiting for the instance to be ready for a long time
```
at metabase.lib.card$fn__77290$fn__77297.invoke(card.cljc:71)
at metabase.lib.card$fn__77302$__GT_card_metadata_columns77301__77303$fn__77304.invoke(card.cljc:141)
at clojure.core$mapv$fn__8569.invoke(core.clj:7059)
at clojure.lang.PersistentVector.reduce(PersistentVector.java:418)
at clojure.core$reduce.invokeStatic(core.clj:6964)
at clojure.core$mapv.invokeStatic(core.clj:7050)
at clojure.core$mapv.invoke(core.clj:7050)
at metabase.lib.card$fn__77302$__GT_card_metadata_columns77301__77303.invoke(card.cljc:141)
at metabase.lib.card$fn__77302$fn__77308.invoke(card.cljc:120)
at metabase.lib.card$fn__77316$card_cols_STAR_77315__77317.invoke(card.cljc:163)
at metabase.lib.card$fn__77316$fn__77322.invoke(card.cljc:157)
at metabase.lib.card$fn__77350$card_metadata_columns77349__77351.invoke(card.cljc:223)
at metabase.lib.card$fn__77350$fn__77354.invoke(card.cljc:217)
at metabase.lib.card$eval77367$_AMPERSAND_f__77368.invoke(card.cljc:257)
at metabase.lib.card$eval77367$fn__77372.invoke(card.cljc:242)
at clojure.lang.MultiFn.invoke(MultiFn.java:244)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777$fn__74778.invoke(calculation.cljc:524)
at metabase.lib.metadata.cache$fn__74548$do_with_cached_value74547__74549.invoke(cache.cljc:104)
at metabase.lib.metadata.cache$fn__74548$fn__74555.invoke(cache.cljc:92)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:523)
at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:516)
at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
at metabase.lib.field.resolution$fn__80775$resolve_in_card_returned_columns80774__80776.invoke(resolution.cljc:352)
at metabase.lib.field.resolution$fn__80775$fn__80784.invoke(resolution.cljc:346)
at metabase.lib.field.resolution$fn__80788$resolve_in_card_or_stage_metadata80787__80789.invoke(resolution.cljc:365)
at metabase.lib.field.resolution$fn__80788$fn__80801.invoke(resolution.cljc:358)
at metabase.lib.field.resolution$resolve_from_previous_stage_or_source_STAR_.invokeStatic(resolution.cljc:410)
at metabase.lib.field.resolution$resolve_from_previous_stage_or_source_STAR_.invoke(resolution.cljc:390)
at metabase.lib.field.resolution$fn__80844$resolve_from_previous_stage_or_source80843__80845.invoke(resolution.cljc:440)
at metabase.lib.field.resolution$fn__80844$fn__80861.invoke(resolution.cljc:434)
at metabase.lib.field.resolution$fn__80865$resolve_field_ref80864__80867.invoke(resolution.cljc:471)
at metabase.lib.field.resolution$fn__80865$fn__80878.invoke(resolution.cljc:457)
at metabase.lib.field$eval80922$_AMPERSAND_f__80923.invoke(field.cljc:62)
at metabase.lib.field$eval80922$fn__80925.invoke(field.cljc:60)
at clojure.lang.MultiFn.invoke(MultiFn.java:239)
at metabase.lib.metadata.calculation$fn__74679$metadata74678__74680$fn__74681.invoke(calculation.cljc:287)
at metabase.lib.metadata.cache$fn__74548$do_with_cached_value74547__74549.invoke(cache.cljc:104)
at metabase.lib.metadata.cache$fn__74548$fn__74555.invoke(cache.cljc:92)
at metabase.lib.metadata.calculation$fn__74679$metadata74678__74680.invoke(calculation.cljc:286)
at metabase.lib.metadata.calculation$fn__74679$fn__74684.invoke(calculation.cljc:275)
at metabase.lib.breakout$fn__80328$breakouts_metadata80327__80329$fn__80331.invoke(breakout.cljc:43)
at clojure.core$mapv$fn__8569.invoke(core.clj:7059)
at clojure.lang.PersistentVector.reduce(PersistentVector.java:418)
at clojure.core$reduce.invokeStatic(core.clj:6964)
at clojure.core$mapv.invokeStatic(core.clj:7050)
at clojure.core$mapv.invoke(core.clj:7050)
at metabase.lib.breakout$fn__80328$breakouts_metadata80327__80329.invoke(breakout.cljc:42)
at metabase.lib.breakout$fn__80328$fn__80334.invoke(breakout.cljc:35)
at metabase.lib.stage$fn__81784$breakouts_columns81783__81785.invoke(stage.cljc:59)
at metabase.lib.stage$fn__81784$fn__81787.invoke(stage.cljc:55)
at metabase.lib.stage$fn__81843$summary_columns81842__81844.invoke(stage.cljc:92)
at metabase.lib.stage$fn__81843$fn__81846.invoke(stage.cljc:86)
at metabase.lib.stage$eval81986$_AMPERSAND_f__81988.invoke(stage.cljc:290)
at metabase.lib.stage$eval81986$fn__81996.invoke(stage.cljc:283)
at clojure.lang.MultiFn.invoke(MultiFn.java:244)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777$fn__74778.invoke(calculation.cljc:524)
at metabase.lib.metadata.cache$fn__74548$do_with_cached_value74547__74549.invoke(cache.cljc:104)
at metabase.lib.metadata.cache$fn__74548$fn__74555.invoke(cache.cljc:92)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:523)
at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:516)
at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:513)
at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
at metabase.lib.metadata.calculation$fn__74776$returned_columns74775__74777.invoke(calculation.cljc:510)
at metabase.lib.metadata.calculation$fn__74776$fn__74781.invoke(calculation.cljc:503)
at metabase.queries.models.card$dataset_query__GT_dimensions.invokeStatic(card.clj:1270)
at metabase.queries.models.card$dataset_query__GT_dimensions.invoke(card.clj:1262)
at metabase.queries.models.card$extract_non_temporal_dimension_ids.invokeStatic(card.clj:1277)
at metabase.queries.models.card$extract_non_temporal_dimension_ids.invoke(card.clj:1274)
at metabase.search.ingestion$execute_function_attr.invokeStatic(ingestion.clj:68)
at metabase.search.ingestion$execute_function_attr.invoke(ingestion.clj:63)
at metabase.search.ingestion$execute_all_function_attrs$fn__131886.invoke(ingestion.clj:80)
at clojure.lang.PersistentHashMap$NodeSeq.kvreduce(PersistentHashMap.java:1309)
at clojure.lang.PersistentHashMap$BitmapIndexedNode.kvreduce(PersistentHashMap.java:804)
at clojure.lang.PersistentHashMap$NodeSeq.kvreduce(PersistentHashMap.java:1314)
at clojure.lang.PersistentHashMap$BitmapIndexedNode.kvreduce(PersistentHashMap.java:804)
at clojure.lang.PersistentHashMap.kvreduce(PersistentHashMap.java:238)
at clojure.core$fn__8559.invokeStatic(core.clj:6987)
at clojure.core$fn__8559.invoke(core.clj:6967)
at clojure.core.protocols$fn__8287$G__8282__8296.invoke(protocols.clj:174)
at clojure.core$reduce_kv.invokeStatic(core.clj:6998)
at clojure.core$reduce_kv.invoke(core.clj:6989)
at metabase.search.ingestion$execute_all_function_attrs.invokeStatic(ingestion.clj:76)
at metabase.search.ingestion$execute_all_function_attrs.invoke(ingestion.clj:73)
at metabase.search.ingestion$__GT_document.invokeStatic(ingestion.clj:87)
at metabase.search.ingestion$__GT_document.invoke(ingestion.clj:85)
at clojure.core$map$fn__5952$fn__5953.invoke(core.clj:2759)
at medley.core$distinct_by$fn__15232$fn__15233.invoke(core.cljc:290)
at clojure.core$map$fn__5952$fn__5953.invoke(core.clj:2759)
at clojure.core$completing$fn__8562.invoke(core.clj:7010)
at clojure.core$map$fn__5952$fn__5953.invoke(core.clj:2759)
at toucan2.pipeline$with_init$fn__51829.invoke(pipeline.clj:327)
at clojure.core$completing$fn__8562.invoke(core.clj:7010)
at toucan2.jdbc.result_set$reduce_result_set.invokeStatic(result_set.clj:156)
at toucan2.jdbc.result_set$reduce_result_set.invoke(result_set.clj:125)
at toucan2.jdbc.query$reduce_jdbc_query.invokeStatic(query.clj:51)
at toucan2.jdbc.query$reduce_jdbc_query.invoke(query.clj:22)
at toucan2.jdbc.pipeline$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invokeStatic(pipeline.clj:19)
at toucan2.jdbc.pipeline$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invoke(pipeline.clj:9)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:15)
at methodical.impl.combo.threaded$combine_methods_thread_last$fn__23165$combined_method_thread_last__23166.invoke(threaded.clj:64)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:216)
at toucan2.pipeline$transduce_execute$with_connection_STAR___51727.invoke(pipeline.clj:78)
at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invokeStatic(connection.clj:13)
at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invoke(connection.clj:11)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
at toucan2.connection$do_with_connection_primary_method_.invokeStatic(connection.clj:204)
at toucan2.connection$do_with_connection_primary_method_.invoke(connection.clj:194)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
at toucan2.pipeline$transduce_execute.invokeStatic(pipeline.clj:77)
at toucan2.pipeline$transduce_execute.invoke(pipeline.clj:64)
at clojure.lang.Var.invoke(Var.java:401)
at toucan2.pipeline$transduce_compiled_query.invokeStatic(pipeline.clj:244)
at toucan2.pipeline$transduce_compiled_query.invoke(pipeline.clj:240)
at toucan2.pipeline$transduce_built_query.invokeStatic(pipeline.clj:252)
at toucan2.pipeline$transduce_built_query.invoke(pipeline.clj:246)
at toucan2.pipeline$transduce_query_primary_method_default.invokeStatic(pipeline.clj:272)
at toucan2.pipeline$transduce_query_primary_method_default.invoke(pipeline.clj:269)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:15)
at methodical.impl.combo.threaded$combine_methods_thread_last$fn__23165$combined_method_thread_last__23166.invoke(threaded.clj:64)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:216)
at toucan2.pipeline$transduce_query_STAR_.invokeStatic(pipeline.clj:278)
at toucan2.pipeline$transduce_query_STAR_.invoke(pipeline.clj:274)
at toucan2.pipeline$transduce_with_model.invokeStatic(pipeline.clj:293)
at toucan2.pipeline$transduce_with_model.invoke(pipeline.clj:280)
at toucan2.pipeline$transduce_parsed.invokeStatic(pipeline.clj:309)
at toucan2.pipeline$transduce_parsed.invoke(pipeline.clj:295)
at clojure.lang.AFn.applyToHelper(AFn.java:160)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$apply.invoke(core.clj:662)
at toucan2.pipeline$reducible_fn$reify__51862.reduce(pipeline.clj:404)
at clojure.core$transduce.invokeStatic(core.clj:7025)
at clojure.core.Eduction.reduce(core.clj:7874)
at clojure.core$reduce.invokeStatic(core.clj:6964)
at clojure.core$reduce.invoke(core.clj:6947)
at metabase.util$rconcat$reify__16182.coll_reduce(util.cljc:1188)
at clojure.core$transduce.invokeStatic(core.clj:7026)
at clojure.core.Eduction.reduce(core.clj:7874)
at clojure.core$transduce.invokeStatic(core.clj:7025)
at clojure.core$transduce.invokeStatic(core.clj:7021)
at clojure.core$transduce.invoke(core.clj:7012)
at metabase.search.appdb.index$index_docs_BANG_.invokeStatic(index.clj:279)
at metabase.search.appdb.index$index_docs_BANG_.invoke(index.clj:275)
at metabase.search.appdb.core$populate_index_BANG_.invokeStatic(core.clj:169)
at metabase.search.appdb.core$populate_index_BANG_.invoke(core.clj:168)
at metabase.search.appdb.core$eval132669$fn__132671.invoke(core.clj:182)
at clojure.lang.MultiFn.invoke(MultiFn.java:234)
at metabase.search.core$init_index_BANG_$iter__133794__133798$fn__133799.invoke(core.clj:91)
at clojure.lang.LazySeq.force(LazySeq.java:50)
at clojure.lang.LazySeq.realize(LazySeq.java:89)
at clojure.lang.LazySeq.seq(LazySeq.java:106)
at clojure.lang.RT.seq(RT.java:555)
at clojure.core$seq__5488.invokeStatic(core.clj:139)
at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:24)
at clojure.core.protocols$fn__8266.invokeStatic(protocols.clj:74)
at clojure.core.protocols$fn__8266.invoke(protocols.clj:74)
at clojure.core.protocols$fn__8207$G__8202__8220.invoke(protocols.clj:13)
at clojure.core$reduce.invokeStatic(core.clj:6965)
at clojure.core$reduce.invoke(core.clj:6947)
at metabase.search.core$init_index_BANG_.invokeStatic(core.clj:88)
at metabase.search.core$init_index_BANG_.doInvoke(core.clj:80)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at metabase.search.task.search_index$init_BANG_$fn__173098.invoke(search_index.clj:38)
at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_$with_connection_STAR___126394$with_transaction_STAR___126395.invoke(cluster_lock.clj:61)
at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
at metabase.app_db.connection$do_transaction$thunk__61025.invoke(connection.clj:145)
at metabase.app_db.connection$do_transaction.invokeStatic(connection.clj:164)
at metabase.app_db.connection$do_transaction.invoke(connection.clj:141)
at metabase.app_db.connection$do_with_transaction_primary_method_java_sql_Connection.invokeStatic(connection.clj:201)
at metabase.app_db.connection$do_with_transaction_primary_method_java_sql_Connection.invoke(connection.clj:174)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:13)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at toucan2.connection$do_with_transaction_around_method_toucan2_connection_default.invokeStatic(connection.clj:249)
at toucan2.connection$do_with_transaction_around_method_toucan2_connection_default.invoke(connection.clj:245)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:13)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:58)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:212)
at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_$with_connection_STAR___126394.invoke(cluster_lock.clj:53)
at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
at toucan2.connection$bind_current_connectable_fn$fn__51305.invoke(connection.clj:104)
at toucan2.jdbc.connection$do_with_connection_primary_method_javax_sql_DataSource.invokeStatic(connection.clj:18)
at toucan2.jdbc.connection$do_with_connection_primary_method_javax_sql_DataSource.invoke(connection.clj:15)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
at metabase.app_db.connection$do_with_connection_primary_method_default.invokeStatic(connection.clj:132)
at metabase.app_db.connection$do_with_connection_primary_method_default.invoke(connection.clj:130)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
at toucan2.connection$do_with_connection_primary_method_.invokeStatic(connection.clj:204)
at toucan2.connection$do_with_connection_primary_method_.invoke(connection.clj:194)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
at methodical.impl.combo.common$partial_STAR_$fn__22829.invoke(common.clj:12)
at methodical.util.FnWithMeta.invoke(util.clj:46)
at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:210)
at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_.invokeStatic(cluster_lock.clj:53)
at metabase.app_db.cluster_lock$do_with_cluster_lock_STAR_.invoke(cluster_lock.clj:51)
at metabase.app_db.cluster_lock$fn__126406$do_with_cluster_lock126405__126407$do_with_cluster_lock_STAR__STAR___126409.invoke(cluster_lock.clj:78)
at clojure.lang.AFn.applyToHelper(AFn.java:152)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$apply.invoke(core.clj:662)
at metabase.util.retry$decorate$fn$reify__126370.call(retry.clj:110)
at io.github.resilience4j.retry.Retry.lambda$decorateCallable$5(Retry.java:306)
at metabase.util.retry$decorate$fn__126369.doInvoke(retry.clj:111)
at clojure.lang.RestFn.invoke(RestFn.java:400)
at metabase.util.retry$fn__126375$make126374__126376$fn__126377.invoke(retry.clj:120)
at metabase.app_db.cluster_lock$fn__126406$do_with_cluster_lock126405__126407.invoke(cluster_lock.clj:82)
at metabase.app_db.cluster_lock$fn__126406$fn__126412.invoke(cluster_lock.clj:63)
at metabase.app_db.cluster_lock$fn__126406$do_with_cluster_lock126405__126407.invoke(cluster_lock.clj:75)
at metabase.app_db.cluster_lock$fn__126406$fn__126412.invoke(cluster_lock.clj:63)
at metabase.search.task.search_index$init_BANG_.invokeStatic(search_index.clj:37)
at metabase.search.task.search_index$init_BANG_.invoke(search_index.clj:33)
at metabase.search.task.search_index$eval173156$fn__173157.invoke(search_index.clj:46)
at metabase.startup.core$run_startup_logic_BANG_$fn__173079.invoke(core.clj:30)
at metabase.startup.core$run_startup_logic_BANG_.invokeStatic(core.clj:28)
at metabase.startup.core$run_startup_logic_BANG_.invoke(core.clj:24)
at metabase.core.core$init_BANG__STAR_.invokeStatic(core.clj:181)
at metabase.core.core$init_BANG__STAR_.invoke(core.clj:117)
at metabase.core.core$init_BANG_.invokeStatic(core.clj:194)
at metabase.core.core$init_BANG_.invoke(core.clj:189)
at dev$init_BANG_.invokeStatic(dev.clj:143)
at dev$init_BANG_.invoke(dev.clj:139)
at dev$start_BANG_.invokeStatic(dev.clj:180)
at dev$start_BANG_.invoke(dev.clj:176)
at dev$eval206099.invokeStatic(NO_SOURCE_FILE:1)
at dev$eval206099.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:7739)
at clojure.lang.Compiler.eval(Compiler.java:7729)
at clojure.lang.Compiler.eval(Compiler.java:7694)
at clojure.core$eval.invokeStatic(core.clj:3232)
at clojure.core$eval.invoke(core.clj:3228)
at vlaaad.reveal.repl$wrap_eval$fn__37945.invoke(repl.clj:90)
at clojure.main$repl$read_eval_print__9248$fn__9251.invoke(main.clj:437)
at clojure.main$repl$read_eval_print__9248.invoke(main.clj:437)
at clojure.main$repl$fn__9257.invoke(main.clj:459)
at clojure.main$repl.invokeStatic(main.clj:459)
at clojure.main$repl.doInvoke(main.clj:368)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$apply.invoke(core.clj:662)
```
Previously we were treating all currency formatting as if we were in a
table, and only adding the currency symbol if `currency-in-header` were
explicitly set to `false` for the column.
When formatting a scalar value, though, we want to always add the
currency symbol inline (since there is no header in this case).
I found that `metabase.channel.render.body/format-cell` and
`metabase.formatter.core/format-number` were actually only used to
format *scalar* cells and *scalar* numbers (as opposed to cells in a
table), so I renamed them for a bit more clarity and added a new
optional argument, `scalar?`, to
`metabase.formatter.core/number-formatter`. When passed (and truthy) the
currency symbol will be splatted into the formatted number even if
`:currency-in-header` is not `false`.
* minor edits
* Update docs/permissions/row-and-column-security.md
Co-authored-by: Alex Yarosh <alexandra@metabase.com>
---------
Co-authored-by: Alex Yarosh <alexandra@metabase.com>
instead just pass `(not-empty q)` to the search subsystem, which will
convert it to `nil` if it's empty and pass it unchanged if it's not.
I still don't think this is probably the ideal user experience when you
navigate to `/search` but it's not an error at least.
* UXW-382 Updates "Public link" menu item for admins when public links aren't enabled so it doesn't look obviously broken
* UXW-382 Updates tests
* UXW-382 Updates "enable public links" menu item to be disabled per PR feedback
* UXW-382 Swaps core styles for mantine props per PR feedback
* fix: issues generating valid urls for map tiles
Fixes to issues generating map tiles, one is on x-ray dashboards we need
to check that we're not in a real dashboard and send an ad hoc tile
request.
Second if the field ref sent in the request has options we need to
remove the 'base-type' option because the type will be encoded as
something like test%2FFloat and the way Jetty decodes URLs before
parsing turns it into a '/' in a position a path separator cannot be:
https://github.com/jetty/jetty.project/issues/7713
* fixup! typeguard dashbaord id
* Update maps.cy.spec.js
* fixup! better handle null field opts
* Re-implementation of `metabase.driver.common.parameters.*` that uses Lib
* Fix Kondo warnings
* Move tests that have nothing to do with drivers to QP
* Test fixes 🔧
* Test fixes 🔧
* Try simplifying the PR
* db routing for redshift
* simplify test
* dataset name multimethod
* small change
* use delayed defs
* add redshift ci routing env var
* small fix
* update dataset definitions
* change back to original data
* feat: driver/do-with-resilient-connection
* feat: :keep-open? option to do-with-connection-with-options
* feat: attempt describe-database with resilient connection
* feat: execute jdbc query with retry conn
* test
* avoid recursive issues
* simplify
* changelog
* type hint
* force local conn, so the connection being closed won't close outer unrealized result sets
* working test
* more test
* opts
* style
* add test for connection options
* notes
* fix test
* docstring
* Update src/metabase/driver/sql_jdbc/execute.clj
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
* logs
* better logs
* try to close conn when it's no longer valid
* pull out logic to is-conn-open
* is-conn-open? test
* clarify
* Update docs/developers-guide/driver-changelog.md
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
* update version
* chore: move tests to right namespace
* retry have select privilege on error
* add test
* improve test
* remove let
* separate connection for each test
* clean up test
* try druid jdbc ci fix
* close connection during test
* use do with resilient connection in test for druid
* formatting
* always set role if supported
* Fix clickhouse and sqlserver
* impersonation test
* use normal-driver-select
* address comments
* kondo
* remove debug
---------
Co-authored-by: Nicola Mometto <nicola.mometto@metabase.com>
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
* UXW-28 Adds confirmation modal when deleting a tab that contains dashboard-only cards
* UXW-28 Makes confirmation modal smarter; uses short version if all questions on a tab are dashboard questions, lists affected questions if it's a mix
* UXW-28 Adds tests
* feat: driver/do-with-resilient-connection
* feat: :keep-open? option to do-with-connection-with-options
* feat: attempt describe-database with resilient connection
* feat: execute jdbc query with retry conn
* test
* avoid recursive issues
* simplify
* changelog
* type hint
* force local conn, so the connection being closed won't close outer unrealized result sets
* working test
* more test
* opts
* style
* add test for connection options
* notes
* fix test
* docstring
* Update src/metabase/driver/sql_jdbc/execute.clj
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
* logs
* better logs
* try to close conn when it's no longer valid
* pull out logic to is-conn-open
* is-conn-open? test
* clarify
* Update docs/developers-guide/driver-changelog.md
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
* update version
* chore: move tests to right namespace
* impersonation test
* use normal-driver-select
* trigger CI
---------
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
* feat(simple-embed): parse attributes with json5 to be more permissive with quotes
* Update package.json
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
* fix tests
* Apply suggestion from @heypoom
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Phoomparin Mano <poom@metabase.com>
* Remove debugging stuff
* 14 failures, 1 error.
* 10 failures, 1 error.
* 10 failures, 0 errors.
* Better log messages
* Faster field ref resolution
* Test fixes 🔧
* Some test fixes 🔧
* Remove resolve-joined-fields middleware
* Fix lib.underlying calculation of fields with join aliases
* Fix busted pivot tests
* Remove unused fn
* More resolution fixes
* drill-thru use vars so we can get updated fns in the REPL
* Consolidate the lib metadata => legacy metadata functions
* Add a pile of additional tests
* Migrate the `resolve-joined-fields` middleware (#39884)
* Support automatically removing duplicate refs in `:fields` and `:breakouts` during normalization
* More cleanup and extra tests 🔧
* Add ::mbql.s/OrderBys
* Mess with logging in resolution even more
* Order bys should be distinct ignoring keys like :base-type or namespaced keys
* I have fixed#60587
* One last round of test fixes??
* Test fix
* Code cleanup
* Fix test failures 🔧
* MongoDB test fix
* Fix Oracle test 🔧
* MongoDB test fix 🔧
* cljfmt
* e2e test fix?
* Test fix 🔧
* Less noisy logging
* Improve field resolution for implicit joins; PR feedback (part 1)
* PR feedback (part 2) and extra dox
* Run tests if files in lib/drivers/qp are changes
check src/metabase/lib, src/metabase/query_processor, modules/drivers
we key off of team label but this is hopefully close enough to what we
really want
* run an action linter
```
❯ actionlint /Users/dan/projects/work/metabase/.github/workflows/drivers.yml
.github/workflows/drivers.yml:440:71: property "exclude-tag" is not defined in object type {name: string; test-args: string} [expression]
.github/workflows/drivers.yml:537:15: description is required in metadata of "Wait for localhost port to be ready" action at "/Users/dan/projects/work/metabase/.github/actions/await-port/action.yml" [action]
|
537 | - uses: ./.github/actions/await-port
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
.github/workflows/drivers.yml:587:13: description is required in metadata of "Test database driver" action at "/Users/dan/projects/work/metabase/.github/actions/test-driver/action.yml" [action]
|
587 | uses: ./.github/actions/test-driver
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.github/workflows/drivers.yml:743:71: property "exclude-tag" is not defined in object type {name: string; test-args: string} [expression]
```
acitonlint seems pretty nice
not fixing the exclude-tag since that seems to work just fine
* fix syntax
* fetch base branch for file checks
to see if we changed files, need the base
* indentation is fun. super fast iteration
* resequence if before run
* run third tier on devex team label
* empty to poke CI
* make prepare-statement private
probably good for this to be private either way, but this is done now to
kick CI and run tests that aren't running in CI
* close single quote
We're using a setting as a half-baked way to track whether we've ever
created a non-table chart. We do this regardless of whether you're an
admin or not, but the endpoint responds with a 403 if you're not an
admin.
Honestly motivation here was fixing [UXW-152: 403 thrown for non-admins
when viewing question re:
non-table-chart-generated](https://linear.app/metabase/issue/UXW-152/403-thrown-for-non-admins-when-viewing-question-re-non-table-chart)
but it feels a little silly. But... it's not *completely* unreasonable.
* dev: add the ability to run native ddl as part of dataset definitions
* Fixing tests
* Fix kondo
* Fix tests and kondo
* Fix clickhouse tests
* Fix another clickhouse test
* Fix bigquery test
* Fix bigquery test
* Trigger Build
* fix: filter-out non-string attributes
We expected login_attributes to only be strings. When they are created
through SAML or JWT logins we don't actually enforce this, so this
filters out non-string attributes printing a warning message if they are
passed for these login types.
* feat: auto assign jwt users to groups by name
When group sync is turned on and there are no group mappings defined for
the jwt integration.
* fixup! remove tenant user group
* fixup! correct bad merge
* fixup! remove some tenant_ids in tests
* fixup! more test fixes
* feat: make jwt group attribute admin configurable
* feat: update group mapping text for jwt behavior
* feat(new-embed): log an error when the parsing of a json attribute fails
* Update enterprise/frontend/src/metabase-enterprise/embedding_iframe_sdk/webcomponents.ts
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: Phoomparin Mano <poom@metabase.com>
* fix: allow scalar user-attributes
Only drop collections which cannot be converted to strings when
generating database queries.
* fixup! remove unused namespace
* fixup! use keep to retain false booleans
* fix: filter-out non-string attributes
We expected login_attributes to only be strings. When they are created
through SAML or JWT logins we don't actually enforce this, so this
filters out non-string attributes printing a warning message if they are
passed for these login types.
* feat: auto assign jwt users to groups by name
When group sync is turned on and there are no group mappings defined for
the jwt integration.
* fixup! remove tenant user group
* fixup! correct bad merge
* fixup! remove some tenant_ids in tests
* fixup! more test fixes
* feat: make jwt group attribute admin configurable
The workflow in the `metabase-ee-extra` repository could run before the
container image tags were created by the workflow in the `metabase`
repository, causing the former to fail. Fix by making the image push
an explicit dependency of the ee-extra trigger.
This works by just totally removing the permission grants created by
sandboxes. Instead we use the `gtapped-table` flag added by the
sandboxing middleware to add just the gtapped-table itself to set of
necessary table create-query permissions and exclude any joined tables
from being added to this set.
If those tables are included elsewhere in the query (not the part
created by the sandbox), they will be added to the set of tables to
check normally and the query will be blocked if the user doesn't have
query-builder perms.
Child collections are automatically created with the same namespace as
their parent collection. Since we enforce a validation that this must be
true it seems simpler for api clients to have this value set for them
rather than requiring them to supply the namespace attribute (though it
still remains optional to pass one.)
* fix: filter-out non-string attributes
We expected login_attributes to only be strings. When they are created
through SAML or JWT logins we don't actually enforce this, so this
filters out non-string attributes printing a warning message if they are
passed for these login types.
* feat: auto assign jwt users to groups by name
When group sync is turned on and there are no group mappings defined for
the jwt integration.
* fixup! remove tenant user group
* fixup! correct bad merge
* fixup! remove some tenant_ids in tests
* fixup! more test fixes
* Update common.clj
* wip
* experiment of callback to see if it works on vue with .callback={}
* basic e2e test for dashboard
* more tests and cleanup
* remove my-app playground
* rm unused file
* use custom elements for the preview
* support for async and defer, defaulting to defer
* clean up custom elements code
* rename drills props
* Revert "experiment of callback to see if it works on vue with .callback={}"
This reverts commit 89a38dca47.
* fix theme not being restored from persisted settings
* fix: load script for preview from instance url, make iframe loaded data
attribute work
* change the snippet to use new defer syntax
* support for exploration with question-id=new
* cleanup
* fix types
* Revert "fix types"
This reverts commit bbc8eb8b59.
* Revert "support for exploration with question-id=new"
This reverts commit 4c3f041629.
* reimplement support for exploration
* fix parameters conditional rendering
* fix linting issues
* fix embed code snippet
* fix(new-embed): allow multiple questions/dashboards on the same page
* test for multiple questions
* add note about theme
* feat(sdk): expose the title prop in StaticQuestion (#61001)
* attempot to make tests more stable
* fix types
* maybe fix tests?
* test for ci
* put back support for is-save-enabled
* H.getIframeBody -> H.getSimpleEmbedIframeContent as it should be less flaky
* restore logic
* fix exploration not working in test
* moved comment to the correct place
* potential fix for handleMessage, ignore messages from other iframes
* use question for exploration templates
* fix type errors
* skip flaky "persists default and hidden parameters"
* fix template: exploration in embed flow
* always enable embedding-simple on embed flow tests
* refactor the custom elements tests to use the generic helpers
* fix tests :fingercrossed:
* default title to true
* update helper to grab the first 37.65
* default drills to true
* we're now showing the title by default
---------
Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
* Do not add new extra empty stages when converting a join from legacy
* Update gitignore
* Simplified fix for #60444
* Fix QUE-1607
* Test fix 🔧
* Fix QUE-1621
* Additional tests.
* Test fix 🔧
* Remove dead code -- schemas for idents in legacy MBQL schema
* Test fix 🔧
* Fix QUE-1623
* Test fix 🔧
* Fix failing tests
* Test fixes 🔧
* Make sure join metadata goes in the right place
* Additional tests
* Make sure join metadata goes in the right place
* Less verbose logging
* Test fixes 🔧
* Some extra tests 🔧
* Another test fix 🔧
* Remove unused export
* Cleanup
* Code cleanup
* Update tests 🔧
* test fixes
* Improve/fix metadata calculation
* Test fixes 🔧
* Update tests
* Test fix 🔧
* Test fixes 🔧
* Test fix 🔧
* Test fixes 🔧
* PR feedback
* Test fix 🔧
* allow tenant attributes CRUD (#60347)
wip merge user and tenant attributes
WIP use new api
Split Mapping Editor
types fixed
so much unit testing
handle null cases
update tests
update a couple more e2e tests
less silly test
make things nicer
invalidate user cache on tenant update
* feat: separate jwt-set attributes from manual-set
* fixup! typescript stuff
* feat: restore structrue-attributes merging
Co-Authored-by: Dan Sutton <dan@metabase.com>
* feat: use merged attributes in routing/sandbox/etc
Co-Authored-By: John Swanson <john.swanson@metabase.com>
* fixup! move group manager test to ee
* fixup! kondo
* fixup! modal spec
* fixup! cypress tests
* fixup! migration timestamp
* fixup! one more cherry pick oopsie
* fixup! sandboxing cypress helper fixes
* fixup! more cypress updates
* fixup! remove eslint directive
* fixup! remove 2-arity router-dbor-id->destination-db-id
All the places it was called with 2-arity were explicitly passing in
@api/current-user anyway
---------
Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
Co-authored-by: Dan Sutton <dan@metabase.com>
Co-authored-by: John Swanson <john.swanson@metabase.com>
* fix: handle headerless translations csv
* fixup! PR feedback
Also fixes an issue with error line number reporting without headers
* feat: allow csv headers to be in any order
* fixup! error reporting test
* fix: remove categories on push
* fix: run each project individually
* fix: run jobs in parallel with pom caching
* fixup! dry it up
* Update snyk.yml
* chore: test deeply nested cards with mixed perms
* chore: test custom expressions and aggregations
* chore: add more tests for blocks and joins
* fixup! whitespace
* fixup! remove confusing comments
Fixes#61253.
Here's the breakdown of the issue, since it's subtle:
- These objects can contain some vanilla JS objects which in embedding
contexts can be `Object.preventExtensions()`'d.
- Eg. the `:visualization-settings` on a card or metric.
- `lib.metadata.cache` uses these objects as part of the cache key.
- Those become the keys of a CLJS map, which uses `cljs.core/hash`
- JS objects and arrays have pointer equality (`identical?` or `===`)
semantics.
- The default `cljs.core.IHash/-hash` uses `goog.getUid(obj)`.
- That subtly mutates objects, adding a non-`enumerable`
`closure_uid_123456789` property with an arbitrary sequence number.
- That's adding a property, which is a violation if
`Object.preventExtensions()` (or `Object.freeze()`) has been used.
- That silently does nothing by default, but throws in strict mode.
This PR modifies the cache key logic (which already has special handling
for `:lib/metadata`) to replace `:lib/type :metadata/card` and
`:metadata/metric` maps with a stub like `[:metric/card 123]`.
* drop unused redux functions
* drop time parsing in event cards
* replace moment types with dayjs
* use dayjs for tz guessing
* drop moment from a hook
* drop unused time functions
* Do not add new extra empty stages when converting a join from legacy
* Update gitignore
* Fix QUE-1607
* Test fix 🔧
* Fix QUE-1621
* Additional tests.
* Test fix 🔧
* Remove dead code -- schemas for idents in legacy MBQL schema
* Test fix 🔧
* Fix QUE-1623
* Test fix 🔧
The test gives a bit of false confidence, as it passed before we added the forced re-indexing at the end of the import.
We probably want a way to keep the transaction open until after the ingestor has processed the messages from the toucan hooks... but that sounds quite invasive and brittle to pull off.
If a locale is not defined for metabase we should not allow
content-translation dictionaries to uploaded with it. Since these
locales can't be used anyway it results in a confusing user experience.
* Populate search index col of non temporal dimension ids using clojure fn
* Add non_temporal_dim_ids filter param to search request
* fix kondo
* Add stub impl of new filter to in-place
* Add metadata provider cache
* Adding has-temporal-dim filter; fix tests
* fix lint
* Fix merge
* Hookup frontend to proper BE search filters; remove deprecated impl of has-temporal-dimensions
* Fix kondo
* Fix lingering refs to has-temporal-dimensions
* Fix lingering refs to has-temporal-dimensions
* fix test
* Fix test
* Remove FE compatibility code that was ported to BE; fix typing of partition helper
* Add helper for parsing non-temporal-dim-ids endpoint param; fix the conditional in FE
* remove debug let
* Add pr ref to comment
* Include dimension filter params in request only if cartesian
* remove specs that depended on checkDimensionCompatibilityForCartesianCharts
* PR feedback
* use existing dataset query transform
* Optimized 1 images, saved 76.0 KB (48.2% smaller)
---------
Co-authored-by: Metabase Automation <github-automation@metabase.com>
* Prg-81-implement-logic-for-opening-store-and-receiving-messages (#60702)
* Add new self hosted upsell flow path
* Add upsell flow hook
* Add company name to params passed to store
* Update url parameters to snake case
* Remove redundant ampersand
* Clean up useEffect dependencies
* Add store origin to token activation message
* Improve put token mock
* Snake case return_url param
* Update messages' types
* Add source check on event
* Use dynamic store value (#60865)
* Create selector for store url
* Use dynamic store value in use upsell flow
* Improve store url selector
* Create useStoreUrl hook and deprecate getStoreUrl selector
* Increase the timeout of toast messages (#60966)
* increase the timeout of toast messages
* Send notification even if reference to store window was lost
* Add metabase window name (#60964)
* Prg-91-migrate-upsell-components-to-support-ee-upsell-flow (#60850)
* Enhance upsell functionality by adding onClick support to UpsellBanner and integrating useUpsellFlow in admin settings
Fix function name
* Use match pattern in UpsellBanner
* Add Upsell baner with click stories and tests
* Add upsell flow to dev instances banner
* Integrate upsell flow into UpsellBanner components
* Fix unrelated tests
* Improve the test assertion
* Prg-95-migrate-upsellcard-to-the-new-upsell-flow (#60989)
* Add onClock to UpsellCard component
* Migrate UpsellCard components to use self hosted upsell flow
* Disable new flow in dev instances upsell (#61048)
* Allow overriding store-url in dev env (#60967)
* Fix upsell flow with undefined store variable (#61056)
* Show failure toast even if connection with store was lost
* Add store-url to e2e default db setup
* Allow undefined store-url value in use upsell flow
* Fix failing unit tests
* Prg 96 migrate upsellbigcard to the new upsell flow (#61063)
* Migrace BigCard to use onClick
* Migrate BigCard upsells
* Add onClick to UpsellPill (#61076)
* Prg-104-run-the-new-upsell-flow-only-for-self-hosted-mb-instances (#61122)
* Disable new upsell flow on hosted instances
* Fix wrong match on UpsellBigCard
* Use getIsHosted selector
add test
* Fix e2e test - selecting upsell button
* Fix extra toast triggered with new upsells
* Add upsell flow to embedding ugprade link, remove binary notice from EE self serve (#61207)
* Fix typos
* Use existing link styles
* Fix tags invalidation for bulk tables update
* Add MassTableVisibilityToggle
* Render mass toggle for schemas
* Add the button for dbs
- fix not-currently-selected branches in the tree not updating
* Fix types
* Align icon
* Align chevron icon
* Always show the toggle button for hidden tables
* Change color of hidden tables
* Only use ids of relevant tables
* Add tests
* Add test
* Take all visibility options into account
* Rename MassTableVisibilityToggle to BulkTableVisibilityToggle
* Fix color
* Render table picker items as anchors
* Remove measuring elements as elements have constant size
* Fix types and tests
* Add test
* [Lib] Finish removing idents
* Fix Kondo warnings
* cljfmt
* Another pass at fixing Kondo warnings
* Test fix 🔧
* Test fix 🔧
* Test fixes 🔧
* A few more fixes 🔧
* Another pass
* Test fix 🔧
* Test fixes 🔧
* Test fix 🔧
* Test fixes 🔧
Suspecting that instances OOM due to loading these into
memory. Increasing context and logging to help diagnose this:
When running tests:
```
clj -X:dev:test :only '["test/metabase/notification" "test/metabase/pulse"]'
...
DEBUG metabase.notification.payload.temp-storage - stored data in temp file {:length 57167}
[main] DEBUG metabase.notification.payload.temp-storage - stored data in temp file {:length 718167}
[main] INFO metabase.notification.payload.temp-storage - reading temp storage file of size: 55.8 kb
[main] INFO metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 198, :dashboard_id 77}
[main] INFO metabase.notification.payload.temp-storage - reading temp storage file of size: 55.8 kb
[main] INFO metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 198, :dashboard_id 77}
[main] INFO metabase.notification.payload.temp-storage - reading temp storage file of size: 701.3 kb
[main] INFO metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 199, :dashboard_id 77}
[main] INFO metabase.notification.payload.temp-storage - reading temp storage file of size: 701.3 kb
[main] INFO metabase.notification.payload.temp-storage - reading file with preamble: {:dashboard_tab_id nil, :card_id 199, :dashboard_id 77}
```
Adding an optional preamble that is just `pr-str`'d and logging a human
readable size of the file that is saved
* add-dimension-projections middleware => Lib (#39877)
* Ban mt/with-column-remappings inside QP tests
* Update pivot QP code to not convert to legacy
* Rename middleware
* Use the remap metadata provider in sandboxing tests
* Overhaul add-implicit-joins middleware
* Restore the wacko metadata updating code
* Ok, joins ARE allowed to have :fields.
* Fix JS tests 🔧
* Fix QUE-1563
* Test fixes 🔧
* Fix 100 more broken things
* Test fixes
* Use same distinct-ref logic as lib
* More test fixes 🔧
* Make add-alias-info better at matching things
* Consolidate the legacy result metadata schemas
* cljfmt
* Use `:decode/normalize` in the REST API for boring things like metadata
* Another round of test fixes 🔧
* Restore kondo ignore
* Another round of test fixes 🔧
* cljfmt
* PR feedback 🔧
* chore: remove wait in favour of waiting for modal to disappear
* feat: wait for query to be completed to possibly avoid DB race condition
* feat: wait for the table name to be shown in the ui before clicking it
* chore: removed un-needed waits
* Update e2e/test/scenarios/admin/admin-reproductions.cy.spec.js
Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
---------
Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
* Move expression widget into subfolder
* Import expression components from top-level
* Move expression helpers to metabase/querying/expressions
* Fix fuzzing paths
* Fix comment
* Add missing exports from expressions
* Remove unused exports
* Sort exports
* Add helper to get supported clauses
* Rename complete to suggestions for consistency
* Move tokenAtPos to position module
* Move assertion helpers to utils
* Split up pratt/types
* Use token text instead of slicing source
* Remove superflouous from and to on token
* Remove superflouous from, to and len on token
* Remove content helper
* Remove superflous fields on Token
* Rename compiler to compile-expression
* Fix imports
* Fix exports
* Remove eslint directives
* Move FK_SYMBOL to formatting/constants
* Use () => undefined instead of jest.fn
* Fix tags invalidation for bulk tables update
* Add MassTableVisibilityToggle
* Render mass toggle for schemas
* Add the button for dbs
- fix not-currently-selected branches in the tree not updating
* Fix types
* Align icon
* Align chevron icon
* Always show the toggle button for hidden tables
* Change color of hidden tables
* Only use ids of relevant tables
* Add tests
* Add test
* Take all visibility options into account
* Rename MassTableVisibilityToggle to BulkTableVisibilityToggle
* Allow supression of case and coalesce arg typechecks
* Add test for ignored type-check
* Configure *suppress-expression-type-check?* in tests
* Fix formatting
As is, field filters and time groupings assume that they can just refer to the field normally. In queries where aliases are
used/required, this doesn't work so well. Letting users specify the alias to use in place of the normal field
reference handles this case.
---------
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
* improve loading experience logic and fix bug where there are tool calls without messages causing messages to get cramed together with no space
* add a unit test
* Add `extraAction` prop to `undo` object
* Make `setEditingParameter` switch tab if needed
* Put a dashboard filter in the viewport
* Fix toast text appearance
* Hide "Show filter" button when moving to top nav
* Add e2e test
* Fix tests
* Ensure postgres downloads don't OOM
Fixes https://github.com/metabase/metabase/issues/60733
For performance reasons we set autocommit to true. this has an
unfortunate consequence that the postgres driver does not honor batch
sizes. We go through a lot of trouble to hook the streaming results of a
query to the output stream of the download, but the postgres jdbc driver
will realize all rows in memory.
A fast way forward is to set autocommit to false only when
`write?` (previous condition) or when executing a postgres download, as
reported in https://github.com/metabase/metabase/issues/60733.
How to test:
this is difficult. In CI we use
```clojure
:ci
{:jvm-opts ["-Xmx12g"
"-Xms12g"
```
So hitting a query that would deterministically OOM the instance
requires a lot more muscle than we realistically want to use.
I'm running the following tests locally:
```
:small-ram
{:jvm-opts ["-Xmx400m"
"-Xms400m"
"-Dci=TRUE"]}
```
```clojure
(defn- readable [bytes]
(cond (nil? bytes) "0 bytes"
(zero? bytes) "0 bytes"
:else
(let [units ["b" "kb" "mb" "gb" "tb"]
magnitude 1024.0]
(loop [[unit & remaining] units
current (double bytes)]
(if (and (seq remaining) (> current magnitude))
(recur remaining (/ current magnitude))
(format "%.1f %s" current unit))))))
(defn- consume
[^java.io.InputStream is]
(let [arr (byte-array 8024)]
(loop [c 0, gas 5000000]
(let [r (java.io.InputStream/.read is arr 0 (alength arr))]
(cond (zero? gas)
(throw (ex-info "Ran out of gas" {}))
(neg? r) c
:else (recur (+ c r) (dec gas)))))))
(deftest large-csv-test
(mt/test-driver :postgres
(testing "Postgres can download csvs without holding the entire results in memory #(#60733)"
(let [large-query "SELECT repeat('x', 2048) FROM generate_series(1, 1000000)"
result (mt/user-real-request :crowberto :post 200 "dataset/csv"
{:request-options {:as :stream}}
{:query (mt/native-query
{:query large-query})
:format_rows true})
size (consume result)]
(is (> size 2000000000)
(format "Only consumed %s but expected ~2gb" (readable size)))))))
```
and then
```
❯ time source pg.env && DRIVERS=postgres clojure -X:dev:test:small-ram :only metabase.driver.postgres-test/large-csv-test
Running QP tests against these drivers: #{:postgres}
LONG TEST in metabase.driver.postgres-test/large-csv-test
Test took 23.358 seconds seconds to run
Ran 1 tests in 32.825 seconds
2 assertions, 0 failures, 0 errors.
{:test 1, :pass 2, :fail 0, :error 0, :type :summary, :duration 32825.099875, :single-threaded 1}
Ran 0 tests in parallel, 1 single-threaded.
Finding and running tests took 40.7 s.
All tests passed.
Running after-run hooks...
```
Why not add these tests now?
We probably should write a full memory regression suite. This is a great
candidate for a first one. But it seems silly to run a new CI job with
just this one job. Push back if you think i'm wrong.
Another area of pushback:
I took the lazy way when determining if a driver should have autocommit
set to false or not: i hardcoded it.
```clojure
(and (-> options :download?) (= driver :postgres))
```
The alternative is some method of a new driver multimethod or
driver-supports?. The former feels a bit heavy-weight, the latter feels
not quite right since this is almost a non-support and all other jdbc
drivers do support it, presumably?
I'm quite open to pushback here and invite comments if you see a better way.
* Can't use an if for write?
You'd think you can use an if here but the previous code used a when and
is silent on write?. Lots of tests fail relating to datasets in test
setup and uploads. Don't want to debug that in this bug fix context so
leaving a todo
* remove old arity metadata. thanks eastwood!
* Don't set autoCommit for all postgres and descendant drivers
```clojure
(ns ^:mb/memory metabase.memory.csv-test
(:require
[clojure.test :refer :all]
[metabase.test :as mt]
[metabase.driver :as driver]))
(set! *warn-on-reflection* true)
(defn- readable [bytes]
(cond (nil? bytes) "0 bytes"
(zero? bytes) "0 bytes"
:else
(let [units ["b" "kb" "mb" "gb" "tb"]
magnitude 1024.0]
(loop [[unit & remaining] units
current (double bytes)]
(if (and (seq remaining) (> current magnitude))
(recur remaining (/ current magnitude))
(format "%.1f %s" current unit))))))
(defn- consume
[^java.io.InputStream is]
(let [arr (byte-array 8024)]
(loop [c 0, gas 5000000]
(let [r (java.io.InputStream/.read is arr 0 (alength arr))]
(cond (zero? gas)
(throw (ex-info "Ran out of gas" {}))
(neg? r) c
:else (recur (+ c r) (dec gas)))))))
(def driver->query
{:sqlite "WITH RECURSIVE generate_series(value) AS (
SELECT 1
UNION ALL
SELECT value + 1 FROM generate_series WHERE value + 1 <= 1000000
)
SELECT replace(hex(zeroblob(1024)), '00', 'xx') FROM generate_series;"
:postgres "SELECT repeat('x', 2048) FROM generate_series(1, 1000000)"
:clickhouse "SELECT repeat('x', 2048)
FROM system.numbers
LIMIT 1000000;"
:redshift "WITH series AS (
SELECT ROW_NUMBER() OVER () as i
FROM stl_scan s1, stl_scan s2
LIMIT 1000000
)
SELECT REPEAT('x', 2048) FROM series;"})
(deftest large-csv-test
(mt/test-drivers #{:postgres :sqlite :clickhouse :redshift}
(testing "Postgres can download csvs without holding the entire results in memory #(#60733)"
(let [large-query (or (driver->query driver/*driver*)
(throw (ex-info "Driver doesn't implement big query"
{:driver driver/*driver*
:available (keys driver->query)})))
result (mt/user-real-request :crowberto :post 200 "dataset/csv"
{:request-options {:as :stream}}
{:query (mt/native-query
{:query large-query})
:format_rows true})
size (consume result)]
(is (> size 2000000000)
(format "Only consumed %s but expected ~2gb" (readable size)))))))
(comment
(mt/set-test-drivers! #{:postgres})
(mt/set-test-drivers! #{:sqlite})
(mt/set-test-drivers! #{:clickhouse})
(mt/set-test-drivers! #{:redshift})
(mt/test-drivers #{:redshift}
(mt/db))
)
```
Verify this with
```
:small-ram
{:jvm-opts ["-Xmx400m"
"-Xms400m"
"-Dci=TRUE"]}
```
and then
```
;; driver.env:
;; local clickhouse
export MB_CLICKHOUSE_TEST_password="password"
export MB_CLICKHOUSE_TEST_username="default"
;; local postgres
export MB_POSTGRESQL_TEST_USER=dan
export MB_REDSHIFT_TEST_PASSWORD=<value>
export MB_REDSHIFT_TEST_USER=<value>
export MB_REDSHIFT_TEST_DB=<value>
export MB_REDSHIFT_TEST_HOST=<value>
```
and then running:
```
❯ source driver.env && DRIVERS=redshift clojure -X:dev:test:drivers:drivers-dev:ee:ee-dev:small-ram :only metabase.memory.csv-test/large-csv-test
...
Running tests in metabase.memory.csv-test/large-csv-test
Finding tests took 8.3 s.
Running 1 tests
Running before-run hooks...
Running QP tests against these drivers: #{:redshift}
..
LONG TEST in metabase.memory.csv-test/large-csv-test
Test took 188.320 seconds seconds to run
Ran 1 tests in 188.338 seconds
2 assertions, 0 failures, 0 errors.
{:test 1, :pass 2, :fail 0, :error 0, :type :summary, :duration 188337.678584, :single-threaded 1}
Ran 0 tests in parallel, 1 single-threaded.
Finding and running tests took 3.3 mins.
All tests passed.
Running after-run hooks...
```
redshift takes a while.
contrast with
```
❯ source driver.env && DRIVERS=clickhouse,postgres clojure -X:dev:test:drivers:drivers-dev:ee:ee-dev:small-ram :only metabase.memory.csv-test/large-csv-test
...
Running QP tests against these drivers: #{:postgres :clickhouse}
...
LONG TEST in metabase.memory.csv-test/large-csv-test
Test took 46.638 seconds seconds to run
Ran 1 tests in 46.655 seconds
4 assertions, 0 failures, 0 errors.
{:test 1, :pass 4, :fail 0, :error 0, :type :summary, :duration 46655.436333, :single-threaded 1}
Ran 0 tests in parallel, 1 single-threaded.
Finding and running tests took 56.5 s.
All tests passed.
Running after-run hooks...
```
both running locally happen in ~1 minute compared to 3 minutes for redshift
* Remove commented out old arity
this funciton used to have two arities for clarity. But it wasn't
another entrypoint, it was just trying to keep things a bit cleaner. But
the result is that at the point where we used the string sql query we
didn't have the `info` map in lexical scope. Fixing this across arities
would have pushed us into 7 positional args, so you might want to switch
to a map, but honestly, it's just the same function.
* Add ResponsiveButton component
* Prevent focus state being cut off
* Make the buttons responsive in the table section
* Make the buttons responsive in field section
* Extract useResponsiveButtons
* Add comments
* Extract useResponsiveButtons in FieldSection
* Add aria-label to the button
* Add tests
* Test tooltips
* Fix indent
* Add "move filter" menu
* Add undo
* Handle single tab dashboards
* Update text color for checked items
* Fix collapsed menu appearance
* Add tests
* Fix error when a tab doesn't have any dashcards
* Fix "Top of page" option selected color
* Use "card.title" viz setting
* Truncate long card titles
* Update "Disconnect from cards" button appearance
* Fix type error
* Make the select searchable, touch up on appearance
* Fix e2e test
* Add `moveDashboardFilter` helper
* Fix e2e test name
* Remove subtitles
* Update icon color
* Update icon color
* SEM-503 Add blue border to selected field
* SEM-504 Border radius of table/field name and description boxes should match that of setting cards
* SEM-509 Improve microcopy for table and field editing instructions
* SEM-510 Field descriptions could use "paragraph" text style with greater line height
* save
* revert redshift changes
* kondo
* add ci routing var
* redshift rough work
* cleanup bigquery changes
* remove bigquery specific redefs and bindings
* add separate var for dataset
* custom routing info per driver
* update changelog
* cljfmt
* fix fe lint
* use deferred-tru
* dissoc db_routing_info for tests
* fix other tests
* fix kondo and lint
* use yaml
* fix whitespace
* change log
* kondo and eastwood
* use markdown for routing info
* remove unneeded driver method
* cleanup
* fix tests
* fix remaining test
* add fe test
* add extra info in register-lazy-loaded-driver
* address pr comment
* improve doc string
* add text-secondary color to database info markdown
* update markdown
* alphabetical order
* move db routing info from db to session properties
* FE adjustments
* dont parse extra info
---------
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
* poc
* timing logs
* Only render compatible datasets
* Build uberjar to be able to test in cloud with more data
* search index support for display
* search index support for exclude-display and has-temporal-dimensions
* fix weird filter vs index column bug
* fix temporal filter
* required ids search index filter
* fix build by removing :display from search render-terms
* adding h2 compatibility
* fixing alignment
* whitespace
* all clicks are add clicks now
* reverted labels change
* whitespace
* whitespace
* mutation -> query, load compatibles at startup
* using viz icons in dataset list
* remove exclude_display
* consolidate search endpoint
* rename display param to display_type
* allignment
* fix filter tests
* test fixes
* Closes VIZ-1185: revert "using viz icons in dataset list"
This reverts commit 7f4d177e977643f90250a5add2f946d6f35ad2a0.
* closes VIZ-1184 copy for "no results"
* closes VIZ-1183 spacing between input and results
* removed log statement
* fixed type
* fixed basics.cy.spec.ts
* fixed dashboard-questions.cy.spec.js
* fixed sharing-reproductions.cy.spec.js
* fixed snowplow-tracking.cy.spec.ts
* fixed funnels.cy.spec.ts
* fixed others
* fix import
* return new fields in results for in-place engine
* test fix
* test fix attempt
* rm backup file
* fixed more e2e tests
* fixup
* more stabilization of e2e tests
* tweak whitespace
* first attempt to fix failing postgres tests
* try a simpler approach
* closes VIZ-1227 search not triggered when no datasource is selected
* new attempt to parameterize the define-spec macro with app-db
* removing non-temporal-dimension-ids filter
* fix cljkondo
* fix test
* fixed e2e (snowplow)
* fixed e2e (funnels)
* fixed e2e (basics)
* better loading state, better typing
* reverted type change
* uncomment e2e cartesian; remove unused search param; fix bg color
* Fix query to resolve to false instead of nil
---------
Co-authored-by: Eliot Daigneault-Mestre <eliot@metabase.com>
Co-authored-by: Noah Moss <noahbmoss@gmail.com>
Co-authored-by: Sébastien <sebastien@metabase.com>
* Stop offering expressions and aggregation being edited as columns
Fixes#61010
* Add repro for metabase#61010
* Add test for custom columns too
* Update expected error message in e2e test
* Detect cycles in resolver too
* Revert "Detect cycles in resolver too"
* Add e2e test for referencing custom expressions that are just wrappers
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
Fixes#44077. Fixes#35840.
Previously this used some custom legacy MBQL manipulation. It was
incorrect and led to a handful of bugs. Now it's a straightforward
edit of the query powered by MBQL lib.
* clear secret file memoization on db update
* add rsa env vars
* improve test
* add more narrow test
* improve test
* refactor snowflake private key test to create and drop user per test
* use accountadmin role
* try granting sysadmin
* try using accountadmin role
* use correct details
* throw exceptions for unimplemented methods
* clean up test code
* use different login and user names for sqlserver impersonation setup
* Require role
* fix sqlserver test
* move feature supported def
* remove outdated test
* feat: swap span for flex in Trigger component with chevron
* chore: use span in flex component
* feat: add small left padding to native editor action buttons
* chore: fix typo on data-testid file
* chore: force viewport to be big enough in cy test
* feat: force the test to small window and execute the drag vertically
* "I'll do this later" doesn't exit the flow (#59993)
* parallelize requests and make them use rtk query (#59563)
* parallelize requests and make them use rtk query
* fix multiple "Automatically Generated Dashboards" collections created +
update types
* add test
* EMB-459: remove 3 tables limit (#59997)
* Tweak welcome step content display (#60083)
* tweak welcome step content display
* update test after copy update
---------
Co-authored-by: Nicolò Pretto <info@npretto.com>
* remove useForceLocaleRefresh as the context is now enough (#60145)
* adds `embedding_setup_click` event (#60315)
* embedding setup: remove last fetch call and speed up e2e (#60392)
* close EMB-487, remove last remaining fetch call
* closes EMB-534, speed up e2e
* createdDashboard -> createdDashboards
* embedding setup: use cloud token in e2e and hide appbar and database status (#60335)
* EMB-533: make the e2e test use the CLOUD pro token
* EMB-532: hide the database sync and the app bars in setup/embedding
* Update e2e/test/scenarios/onboarding/setup/setup-embedding.cy.spec.ts
* fix typo
---------
Co-authored-by: Kyle Doherty <5248953+kdoh@users.noreply.github.com>
* Empty
* No need for intersection in test
* Correct modestring casing
* Test datetime(number, mode) for s, ms, us, ns
* Allow uppercase and hyphens but normalize them.
* Don't allow hyphens in frontend.
* Implement unix casts for mongo
* Convert floats to long
* Use hyphenated keywords internally
* expand docstring
* Try other implementation of nanoseconds for BigQuery
* Handle sqlserver unix timestamps with multimethod
* More flexible date type handling
* Use integer division with bigquery
* datetime(number) frontend tests
* Undo change to package.json
* Empty
* Wrap code-like stuff in ``
* Add expressions/today feature
* Add legacy + lib for today()
* Basic test for today() (WIP)
* Add expressions/today feature to sql + implementation
* Finalize today() test
* Implement today() on mongo
* Better comment
* use m/find-first
* Frontend implementation
* Add today() fe test
* Improve fe test for today()
* Add a line to changelog
* Add line to changelog about expressions/today
* Handle different types better in lib schema
* Add special case for mode in formatter
* Add mode to expression options
* Add special case for mode in parser
* Error message
* Schema with options
* Add options map to legacy schema for datetime
* Remove comment
* Add unit test for mode option in compiler
* Add test for formatting the mode option in datetime
* Better round-tripping for :datetime function
* Add :mode to allowed keys for options marshalling
* Fix expression to add mode to options map
* Test datetime() legacy/lib roundtripping
* Fix normalization
* Remove println
* Mongo datetime() with options map
* Move test to custom-column spec
* Remove duplicate check
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* In main nav, don't show 'Other users' personal collections' if there are no other users
---------
Co-authored-by: Ryan Laurie <iethree@gmail.com>
Co-authored-by: Fraser <fraser@metabase.com>
This PR fixes a bug where dashboard filters linked to multiple fields would show entity keys instead of remapped entity names when viewed by users with grouped (limited) permissions.
The solution in this PR is to add support for explicit remapping field specification.
Also resolved a separate permissions caching bug in data_permissions.clj where the use-cache? logic was inverted.
Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
* Empty
* No need for intersection in test
* Correct modestring casing
* Test datetime(number, mode) for s, ms, us, ns
* Allow uppercase and hyphens but normalize them.
* Don't allow hyphens in frontend.
* Implement unix casts for mongo
* Convert floats to long
* Use hyphenated keywords internally
* expand docstring
* Try other implementation of nanoseconds for BigQuery
* Handle sqlserver unix timestamps with multimethod
* More flexible date type handling
* Use integer division with bigquery
* datetime(number) frontend tests
* Undo change to package.json
* Wrap code-like stuff in ``
* Better comment
* use m/find-first
* Add a line to changelog
* Handle different types better in lib schema
* Add special case for mode in formatter
* Add mode to expression options
* Add special case for mode in parser
* Error message
* Schema with options
* Add options map to legacy schema for datetime
* Remove comment
* Add unit test for mode option in compiler
* Add test for formatting the mode option in datetime
* Better round-tripping for :datetime function
* Add :mode to allowed keys for options marshalling
* Fix expression to add mode to options map
* Test datetime() legacy/lib roundtripping
* Fix normalization
* Remove println
* Mongo datetime() with options map
* Remove duplicate check
* Add simple bytes to compiler
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* Add aggregation columns
* Pass expressionIndex to Expression editor in AggregationPicker
* Add expression-parts-method for aggregation references
* Add support in the query processor
* Add more tests
* Hack FE to call aggregablecolumns
* Add missing expressionMode option
* Add columnsForExpressionMode helper
* Update error message from resolver
* Add query with aggregation for tests
* Add tests for resolving aggregations
* Fix tests
* Fix CLJS tests
* Fix more tests
* Add missing docstring
* Add more unit tests
* Add unit test for aggregation completions
* Fix error message in test
* Add tests for second stage resolver
* Add tests for referencing aggregations
* Add test for resolving aggregation in next stage
* Disambiguate test name
* Fix column names returned by QP for aliased aggregations
* Fix merge issues
* Fix final test
* Address review comments
* Move aggregation tests
* Add test for detecting cycles in aggregations
* Add test about disallowing duplicate aggregation names
* Add sort helper
* Add tests for using nested aggregations as question source
* Add e2e test for nested aggregations in follow up stage
* Add tests for using nested aggregations in follow up stage with breakout
* Allow duplicate aggregation names
* Add test for changing aggregation order in underlying question
* Remove nonsensical test
* Fix test descriptions
* Fix test
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* Add BE repro test for #58314
* Add repro test for #35252
* Add repro test for #39033
* Add repro test for #27521
* Add repro test for #47734
* Add repro test for QUE-1378
* Add repro test for QUE-1374
* Add repro test for #58314
* Add repro test for #44767Closes#44767
* Add repro test for #60498
* Add repro test for #60444
* Make test for #60444 more general
* run embedding-sdk.yml from run-tests.yml
* remove e2e-tests-skipped-stub
* try to put back some structure
* fix name of build
* / -> › because github doesn't uses only the part after the last slash
* use > instead of chevron to make linter happy
* breaking changeS
* remove code to trigger ci
* Fix flaky test by adding aria-hidden on elements rendered only to perform measurements
* Revert "Fix flaky test by adding aria-hidden on elements rendered only to perform measurements"
This reverts commit 5575d6b43b.
* Fix flaky test by adding aria-hidden on elements rendered only to perform measurements
* Use hidden instead of aria-hidden
* Filter out invisible elements
* Revert adding hidden attribute
* moving pickers into same folder, consolidate getInitialContainer hooks
* getCollectionIdPath consolidation
* getStateFromIdPath
* comitting sins to get tests passing
Fixes getting source tables in multistage aggregations. The check for
when we were in the scope of the parent card was in the wrong place in
the match which resulted in us failing to make a source-query block
immediately inside a stage with a source card.
Two changes required to allow this:
- first, for the setting itself, allow setting it if the database is
writable OR an attached DWH.
- second, a similar change to make sure `syncable_schemas` is fetchable
for the attached DWH.
* SEM-239 Data model - Layout boilerplate (#57174)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* SEM-240 Data model - Table section (#57248)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Fix flaky unit tests
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* SEM-241 Data model - Field - Data section (#57420)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Navigation onClick
* Fix flaky unit tests
* Use a link
* Explain cast
* Improve url generation
* Style active link
* Load field, display name
* Sticky header
* Add SectionPill
* Add field name and data type
* Add cast toggle
* Add CoercionStrategyPicker
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* Casting toggle state sync
* CoercionStrategyPicker error state
* Extract FieldDataSection
* Reuse existing TextInputBlurChange
* Further cleanup
* Use key for FieldSection
* Lift data fetching
* Add decoration
* Use key for table as well
* Add unit tests
* Add unit tests
* Add unit tests
* Add comments
* Simplify color
* Use type instead of interface
* SEM-297 Drop entity framework usage in `SemanticTypePicker` (#57531)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Navigation onClick
* Fix flaky unit tests
* Use a link
* Explain cast
* Improve url generation
* Style active link
* Load field, display name
* Sticky header
* Add SectionPill
* Add field name and data type
* Add cast toggle
* Add CoercionStrategyPicker
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* Casting toggle state sync
* CoercionStrategyPicker error state
* Extract FieldDataSection
* Reuse existing TextInputBlurChange
* Further cleanup
* Use key for FieldSection
* Lift data fetching
* Add decoration
* Use key for table as well
* Add unit tests
* Add unit tests
* Add unit tests
* Add comments
* Drop entity framework in FkTargetPicker
* Make table names show up
* Clean up
* Fix types
* Fix table names
* Add tests
* Add tests
* Add tests
* Restrict imports
* Improve config
* Restrict entity framework imports
* Simplify color
* Use type instead of interface
* Lint
* SEM-267 Data model - Field - Metadata section (#57527)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Navigation onClick
* Fix flaky unit tests
* Use a link
* Explain cast
* Improve url generation
* Style active link
* Load field, display name
* Sticky header
* Add SectionPill
* Add field name and data type
* Add cast toggle
* Add CoercionStrategyPicker
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* Casting toggle state sync
* CoercionStrategyPicker error state
* Extract FieldDataSection
* Reuse existing TextInputBlurChange
* Further cleanup
* Use key for FieldSection
* Lift data fetching
* Add decoration
* Use key for table as well
* Add unit tests
* Add unit tests
* Add unit tests
* Add comments
* Add Metadata section with display name input
* Pass table through components
* Drop entity framework in FkTargetPicker
* Revert "Pass table through components"
This reverts commit 2eb3e3a256.
* Make table names show up
* Clean up
* Fix types
* Fix table names
* Add tests
* Add tests
* Add tests
* Restrict imports
* Improve config
* Restrict entity framework imports
* Simplify color
* Use type instead of interface
* Use SemanticTypeAndTargetPicker in FieldSection
* Sort
* Lint
* Typing
* Do not use v1/metadata wrapper
* Add TextareaBlurChange
* Add description input
* Update comments
* Update icon
* Add plugin query props
* Remove redundant prop
* Remove redundant _.omit
* Fix textarea crashing due to min height on input
* Set minRows
* Fix styling
* Remove PLUGIN_FEATURE_LEVEL_PERMISSIONS plugin usage from DatasetFieldMetadataFkTargetPicker
- because that's not how it works in master
* Drop -v2 suffix for new routes, use -v1 suffix for old routes (#57637)
* SEM-242 Data model - Field - Behavior section (#57638)
* Drop -v2 suffix for new routes, use -v1 suffix for old routes
* Move FieldVisibilityPicker
* Make FieldVisibilityPicker work with api Field
* Use FieldVisibilityType
* Fix gap
* Update tests
* Add label and description
* Add FieldValuesTypePicker
* Add canUnfoldJson and hasDatabaseFeature
* Rename
* Add UnfoldJsonPicker
* Fix typing
* Add RescanFieldButton
* Add DiscardFieldValuesButton
* Style the connector
* Fix scrolling
* Update spacing
* Add tests for FieldValuesTypePicker
* Add tests
* Add UnfoldJsonPicker tests
* Add tests
* Add tests
* Clean up timeouts on unmount
* Improve typing
* SEM-269 Data model - Field - Formatting section (#57682)
* Drop -v2 suffix for new routes, use -v1 suffix for old routes
* Move FieldVisibilityPicker
* Make FieldVisibilityPicker work with api Field
* Use FieldVisibilityType
* Fix gap
* Update tests
* Add label and description
* Add FieldValuesTypePicker
* Add canUnfoldJson and hasDatabaseFeature
* Rename
* Add UnfoldJsonPicker
* Fix typing
* Add RescanFieldButton
* Add DiscardFieldValuesButton
* Style the connector
* Fix scrolling
* Update spacing
* Add tests for FieldValuesTypePicker
* Add tests
* Add UnfoldJsonPicker tests
* Add tests
* Add tests
* Add FormattingSection
* Sort
* Make formatting form full width
* Use style prop instead of maxWidth
* Clean up timeouts on unmount
* Improve typing
* Metadata preview boilerplate (#58015)
* Render preview
* Add preview type selector
* Fix flex layout
* Lift preview type to top component to keep the state
* Move helpers to utils
* Add unit tests for preview picker
* Add feedback to metadata editor when saving config (#58038)
* Add feedback to all table and field settings
* Add missing prop
* Metadata table and detail preview (#57887)
* Handle undefined metadata
* Render Table preview
* Add custom error component
* Add helper for error message
* Add detail preview
* Make comment more clear
* Fix type
* Fix missing props
* Metadata table picker (#57648)
* Set up TablePicker component
* Fix type in api
* Add initial TablePicker implementation
* Add schema icon
* Update url for datapicker
* Move data loading to utils
* Add loading node types
* Derive icon from type
* Try building the treepicker state asynchronously
* Build custom tree
* Add loading state
* Push url state in picker
* Sync open state with url
* Use helper to manage expanded state
* Split Node into separate file
* Expose prefetch hook
* Prefetch data to avoid showing loading states
* Add search to table picker
* Move search-related stuff into Search module
* Use Link for navigation
* Add renderLoading helper
* Remove unused prop
* Make search input sticky
* Add separate sidebar for field picker
* Render single schema but open it by default
* Translate errors
* Defer search value
* Export lazy loaders for database info
* Use top-level data fetching
* Enable virtualization
* Move loader utils into utils
* Remove Node implementation
* Simplify styles
* Pull out some logic
* Reuse results in search
* Reuse tree helpers when handling search results
* Avoid passing down isExpanded
* Memoize
* Fix initial expanded state
* Automatically expand single-schema databases
* Pass tableId to DataPicker
* Add styling for active item
* Add getUrl helper for tree nodes
* Move types to separate file
* Simplify item
* Rename Item to Results
* Simplify
* Allow wrapping everywhere
* Add loading state
* Render tracks
* Remove unused colors
* Scroll active item into view
* Fix paths
* Add missing keys
* Handle browser navigation in table picker
* Handle browser navigation in table picker
* Add more documentation
* Debounce search
* Render track even when no parent was found
* Allow rendering urls to schema's with no name
* Add value to loading nodes
* Add delay to track too
* Add explicit level to FlatItem
* Add explicit parent refence to FlatItem
* Hide nameless schemas in the tree
* Refactor
* Move key to top-level item
* Make TablePicker not depend on router
* Disable smooth scroll
* Add unit tests for TablePicker
* Unnest unnamed schemas directly
* Also fetch tables when only one schema exists
* Remeasure items when they change
* Use more precise typeing for items
* Allow clicking table nodes in search results
* Remove unused classes
* Remove unused useDispatch hook
* Remove delay on loading items
* Add custom empty state
* Typo
* Add keyboard navigation to table picker
* Use test helpers in all tests
* Add keyboard navigation to search results too
* Add custom focus state for search items
* Add unit tests for search
* Jump to parent when pressing left arrow
* Add more cases to keyboard test
* Add hover state to table picker
* Use table display name in table picker
* Flatten single schema in to database
* Rename onChange_ to handleChange
* Use folder for schema
* Make the hover and active colors the same
* Rename Data tab to Data Model
* Remove title
* Fix layout
* Field description editor (#58280)
* Use NameDescriptionInput for the field section too
* Use TextArea for description editor
* Post-merge fixes
* Metadata editing UI tweaks (#58297)
* Add background to fields
* Tweak colors for disabled inputs
* Remove icons in SectionPill
* Remove icon from one more SectionPill
* Remove lint
* Move segments to table picker (#58422)
* Add link to segments in the datamodel sidebar
* Add local state to RouterTablePicker
* Nest segments under DataModel
* Add wrapper classes to revision routes
* Fix spacing for empty state
* Add active state to segments link
* Remove DataModelApp in DataModel routes
* Fix overflow in segment form
* Merge translation strings
* Add background color to segments components
* SEM-363 Data model - Field and table name/description inputs should be sticky and have icons (#58703)
* Remove hover/focus effect and break components down into files
* Update comment
* Consolidate toasts
* Remove unused styles
* Remove redundant card
* Extract SegmentsLink
* Make name/description input sticky
* Add icons
* Remove leftovers
* Fix TS error
* Move visibility toggles to the table picker (#58284)
* Fetch hidden tables
* Fetch hidden schemas
* Add visibility toggles to the table picker
* Remove table visibility toggle in table section
* Simplify visibility toggler
* Move visibility toggle to separate file
* Add unit tests for visibility toggle
* Show table as hidden whenever there is any visibility
* Use ActionIcon
* Break up onClick handler
* Use plan Icon
* Remove data from nodes that don't need it
* Add tooltips to table visibility togglers
* Wrap icons in ActionIcon
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
* Cleanup
* SEM-361 Data model - Field metadata/formatting settings do not affect the preview (#58841)
* Fix SEM-361
* Fix types
* SEM-311 Table preview - no impact when changing time formatting for seconds and ms (#58927)
* Avoid using a breakout for date-time columns
* Use the same logic for every type of field
* SEM-246 Data model - Filtering preview (#58854)
* Fix SEM-361
* Fix types
* Add FilteringPreview boilerplate
* Use FilterPickerBody
* Another attempt
* Make it work for all types of filters
* Memoize query
* Clear filter input on field change
* Account for prop changes
* Fix TS error
* SEM-268 Data model - Field - Behavior section - Display values (#57684)
* Drop -v2 suffix for new routes, use -v1 suffix for old routes
* Move FieldVisibilityPicker
* Make FieldVisibilityPicker work with api Field
* Use FieldVisibilityType
* Fix gap
* Update tests
* Add label and description
* Add FieldValuesTypePicker
* Add canUnfoldJson and hasDatabaseFeature
* Rename
* Add UnfoldJsonPicker
* Fix typing
* Add RescanFieldButton
* Add DiscardFieldValuesButton
* Style the connector
* Fix scrolling
* Update spacing
* Add tests for FieldValuesTypePicker
* Add tests
* Add UnfoldJsonPicker tests
* Add tests
* Add tests
* Add placeholder
* Add RemappingPicker boilerplate
* Clean up timeouts on unmount
* Improve typing
* Add onChange logic boilerplate
* Extract DisplayValuesPicker
* Remove redundant code
* Format code
* Add fk input boilerplate
* Disable options instead of hiding them
* Rename
* Fetch required data
* Use full data
* Implement fk remapping onChange
* Implement naming tip
* Fix state
* Extract utils
* Fix schema step errors
* Add remappings boilerplate
* Fetch remappings
* Add more modal boilerplate
* Add modal props
* Handle modal state
* Add explicit edit button
* Implement modal form
* Limit amount of Boxes
* Bring all safety checks back in
* Refactor CustomMappingModal
* Style CustomMappingModal
* Extract getHasEmptyValues
* Remove todo
* Prevent flicker
* Fix initial state of fk picker
* Use is touched
* Add CustomMappingModal unit tests
* Add DisplayValuesPicker unit tests
* Move DisplayValuesPicker
* Remove redundant tags
* Fix uncontrolled/controller input react warning
* Add explanatory tooltips for disabled options
* Fix 1px of background leaking into view
* Add missing memoization
* Reset state when cancelling
* Sync single table via UI (#58342)
* add table-manual-sync event
* add table/sync_schema endpoint
* add table sync test
* Add api helper for the sync table schema endpoint
* Add SyncTableSchemaButton component
* Add SyncTableSchemaButton to table section
* Add unit tests for SyncTableSchemaButton
* Also invalidate field-values and parameter-values
* Simplify SyncTableSchemaButton hooks
* Move useTemporaryState into a separate hook
* Apply same pattern in all buttons
* address PR review comments: use `get-database`, `with-database-routing-off`
* Pass argument to useTemporaryState
* update test
---------
Co-authored-by: Nicola Mometto <nicola.mometto@metabase.com>
* Fix SEM-370 (#59051)
* Post-merge conflict fix
* SEM-329 Data model - Table section - Update fields sorting interaction (#59316)
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Pixel-perfect
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* SEM-376 Data model - Resizable columns layout (#59100)
* Format code
* Prevent updates when nothing changes
* Use new colors
* Make nav resizable
* Fix nav width
* Remove unused styles
* Prevent CLS in SortableList
* Add comment
* Get rid of second page component
* Make table column resizable
* Add padding and min width for the empty state
* Optimize
* Extract ResizableColumn
* Toggle preview
* Add preview and field resizing
* Extract getTableMetadataQuery
* Preview positioning and shadow
* Show scrollbar on preview overflow
* Fix resizing bounds
* Remove redundant props
* Handle Escape key
* Add comment
* Update default constraints
* Make preview non-resizable
* Fix valid Escape press detection
* Fix types
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Auto-grow table column when possible
* Auto-magic layout
* Fix sign
* Optimize
* Optimize
* Pixel-perfect
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* Fix interactivity in inputs
* Move memoization closer to component definition
* SEM-327 Data model - Move the re-scan / discard options away from the bottom of the fields list (#59474)
* Format code
* Prevent updates when nothing changes
* Use new colors
* Make nav resizable
* Fix nav width
* Remove unused styles
* Prevent CLS in SortableList
* Add comment
* Get rid of second page component
* Make table column resizable
* Add padding and min width for the empty state
* Optimize
* Extract ResizableColumn
* Toggle preview
* Add preview and field resizing
* Extract getTableMetadataQuery
* Preview positioning and shadow
* Show scrollbar on preview overflow
* Fix resizing bounds
* Remove redundant props
* Handle Escape key
* Add comment
* Update default constraints
* Make preview non-resizable
* Fix valid Escape press detection
* Fix types
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Auto-grow table column when possible
* Auto-magic layout
* Fix sign
* Optimize
* Optimize
* Pixel-perfect
* SyncOptionsModal
* Move
* Field values modal
* Responsiveness
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* Fix interactivity in inputs
* Move memoization closer to component definition
* Tmp
* Revert "Tmp"
This reverts commit 6e561c0de7.
* SEM-424 Tests parity - datamodel.cy.spec.js (#59548)
* Format code
* Prevent updates when nothing changes
* Use new colors
* Make nav resizable
* Fix nav width
* Remove unused styles
* Prevent CLS in SortableList
* Add comment
* Get rid of second page component
* Make table column resizable
* Add padding and min width for the empty state
* Optimize
* Extract ResizableColumn
* Toggle preview
* Add preview and field resizing
* Extract getTableMetadataQuery
* Preview positioning and shadow
* Show scrollbar on preview overflow
* Fix resizing bounds
* Remove redundant props
* Handle Escape key
* Add comment
* Update default constraints
* Make preview non-resizable
* Fix valid Escape press detection
* Fix types
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Auto-grow table column when possible
* Auto-magic layout
* Fix sign
* Optimize
* Optimize
* Pixel-perfect
* SyncOptionsModal
* Move
* Field values modal
* Responsiveness
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Port test
* Fix typing
* Port test
* Port tests
* Format code, add data-testid
* Port more tests
* Refactor withDatabase to TypeScript
* Await
* Fix prop handling
* Port test
* Memoize textarea for performance
* Port test
* Port tests
* Remove unlawful getFieldDisplayName usages
* ESLint
* Add JSDoc
* Port tests
* Port tests
* Format code
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* Fix interactivity in inputs
* Move memoization closer to component definition
* Tmp
* Revert "Tmp"
This reverts commit 6e561c0de7.
* Fix circular dependency
* Post-merge fix
* SEM-425 Tests parity - editor.cy.spec.js (#59838)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Simplify assertion
* SEM-426 Tests parity - reproductions.cy.spec.ts (#59970)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Simplify assertion
* SEM-427 Tests parity - remaining e2e suites (#59980)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Update test
* Update test
* Update test
* Update tests
* Update test
* Update test
* Update test
* Update test
* Update tests
* Update tests
* Typo
* Update unit tests
* Remove encodeURIComponent
* Make it clear what is schemaName and schemaId
* Rename schemaId to schemaName in table picker
* Update unit tests
* Update unit tests
* Skip soon-to-be-ported unit tests
* Attempt to fix a test
* Update test
* Update unit test
* Update test
* Revert refetching
* Data model - Simple flex layout (#59995)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Update test
* Update test
* Update test
* Update tests
* Update test
* Update test
* Update test
* Update test
* Update tests
* Update tests
* Typo
* Update unit tests
* Remove encodeURIComponent
* Make it clear what is schemaName and schemaId
* Rename schemaId to schemaName in table picker
* Update unit tests
* Update unit tests
* Skip soon-to-be-ported unit tests
* Attempt to fix a test
* Update test
* Update unit test
* Update test
* Revert refetching
* Try simple flex layout
* Update proportions
* Remove redundant elements
* Clean up
* Use ellipsis instead of wrapping
* Pixel perfect
* Tweak constants
* SEM-448 Tests parity - unit tests (#60042)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Update test
* Update test
* Update test
* Update tests
* Update test
* Update test
* Update test
* Update test
* Update tests
* Update tests
* Typo
* Update unit tests
* Remove encodeURIComponent
* Make it clear what is schemaName and schemaId
* Rename schemaId to schemaName in table picker
* Update unit tests
* Update unit tests
* Skip soon-to-be-ported unit tests
* Attempt to fix a test
* Update test
* Update unit test
* Update test
* Revert refetching
* Try simple flex layout
* Update proportions
* Remove redundant elements
* Clean up
* Use ellipsis instead of wrapping
* Pixel perfect
* Tweak constants
* Add data model unit tests boilerplate
* Optimistically remove TODOs
* Use router
* Fix element rendering in tests
* Add tests + fixes
* Port tests
* Port a test, fix a util
* Port test
* Port tests
* Port tests
* Remove old tests
* Port tests
* Remove old tests
* Port tests
* Remove old tests
* Fix disabling tables in search results
* Fix flakes
* Update tests
* Remove redundant check
* SEM-434 Missing metadata in FieldDataSelector (#60262)
* Manually override tables prop and add missing properties to Field objects
- Fixes SEM-434
* Format code
* Use field.display_name
* Memoize tables
* SEM-462 Small tweaks (#60187)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Fix events
* Use prop instead of CSS
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Add comments
* SEM-460 Show prefix for JSON-unfolded columns (#60328)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Show prefix in FieldItem
* Show prefix in SortableFieldItem
* Fix events
* Handle ellipsis
* Show prefix in NameDescriptionInput
* Update tests
* Update types
* Use prop instead of CSS
* Improve responsiveness
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Add comments
* SEM-420 Organize e2e tests (#60379)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Show prefix in FieldItem
* Show prefix in SortableFieldItem
* Fix events
* Handle ellipsis
* Show prefix in NameDescriptionInput
* Update tests
* Update types
* Use prop instead of CSS
* Improve responsiveness
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Move segments to a separate spec
* Organize tests
* Add comments
* SEM-420 Organize e2e tests (part 2) (#60388)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Show prefix in FieldItem
* Show prefix in SortableFieldItem
* Fix events
* Handle ellipsis
* Show prefix in NameDescriptionInput
* Update tests
* Update types
* Use prop instead of CSS
* Improve responsiveness
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Move segments to a separate spec
* Organize tests
* Move tests
* Move tests
* Add comments
* Merge tests
* Move tests
* Use modern selectors
* Move tests
* Move tests
* Reorder tests
* SEM-420 Test new features (e2e) (#60439)
* Add new tests, simplify toasts, remove long prefix from utils
* Test toasts
* Reuse utils
* Add table picker test for no schemas
* Fix schemaless tables not shown in search
* Add sync options test
* Fix & test prefixes
* Add logs
* Format code
* Coercion strategy test
* Add tests for visibility
* Update assertions
* Add test for tooltips
* Field values tests
* Add tests for filtering
* Add preview assertion
* Refactor preview verification
* Fix showing 403 error in preview
* Add preview tests
* Add preview assertions
* Add preview assertions
* Add preview assertions
* Add preview tests
* Move modals and state handling, add tests for Esc key
* Update unit tests
* Use useDisclosure
* Add extra error status check
* Revert unnecessary changes in cross-version tests
* SEM-419 Increase test coverage (unit tests) (#60491)
* Add new tests, simplify toasts, remove long prefix from utils
* Test toasts
* Reuse utils
* Add table picker test for no schemas
* Fix schemaless tables not shown in search
* Add sync options test
* Fix & test prefixes
* Add logs
* Format code
* Coercion strategy test
* Add tests for visibility
* Update assertions
* Add test for tooltips
* Field values tests
* Add tests for filtering
* Add preview assertion
* Refactor preview verification
* Fix showing 403 error in preview
* Add preview tests
* Add preview assertions
* Add preview assertions
* Add preview assertions
* Add preview tests
* Move modals and state handling, add tests for Esc key
* Update unit tests
* Add FieldOrderPicker unit tests
* Add CurrencyPicker unit tests
* Add FkTargetPicker unit tests
* Add more tests
* Add SemanticTypeAndTargetPicker unit tests
* Remove redundant code
* Move RemappingPicker
* Use useDisclosure
* Add extra error status check
* SEM-247 Clean up old Table Metadata page code (#60557)
* Remove old metadata page
* Move humanizeCoercionStrategy
* Remove unused functions
* Fix SEM-484 (#60600)
* Add tests
* Center field error
* Do not navigate if there's an explicit param
* Show field error
* Fix schemas loading, add tests
* Revert unnecessary change
* Fix data fetching
* Improve comments
* Remove invalid test for schemas
* Optimize conditions
* When table is not found, show the empty state as if table was not selected yet
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
Co-authored-by: Nicola Mometto <nicola.mometto@metabase.com>
* Use displayName for error
* Fix error position for node
* Move padding to cm-content to avoid whitespace above gutter
* Add border radius to editor to avoid overflowing container
* Fix displayname in unit test
* Fix type for position
* Add test for error position
* Add unit test for position helper
* Add warning_triangle_filled icon
* Use warning_triangle_filled icon for error toasts in buttons
* Show error toasts consistently
* Fix error handling in table preview
* Fix error handling in object detail preview
* Update message
* Add toasts for sorting
* Add test for errors
* Add missing tests
* Update test
* Add iconColor prop to Undo and use it instead of hardcoding color in warning_triangle_filled icon
* Ensure that we keep the selected table even when collapsing the tree
- Fixes SEM-435
* Update tests
* Always highlight selected table
* Use aria-selected
* Add validation for case/if clause types
* Add e2e repro for metabase#57674
* Avoid passing nil default into expressions
* Check for type compatibility, not equality
* Allow unknoen types
* Make e2e test more refined
* Fix e2e test
* Fix clj test
* Fix e2e test
* Handle set arguments to compatible?
* Fix docstring
* Use assignable? instead of most-common-ancestor
* Allow Date/DateTime/... to mix
* Use best-return-type to determine if all types are compatible
* Handle falsy default
* Add missing map
* Update comment to clarify compatibility omission
* Unwrap schema
* Add test for malformed case expressions
* Add type check to coalaesce too
* Add check to coalesce too
* Add tests for :default false
* Add tests for temporal types
* Move combination tests to BE test
* Use separate deftests for valid and invalid case and coalesce tests
* Fold repetitive parts into are expression
* Formatting of test
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Formatting of test
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Formatting of test
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Split up more tests
* Formatting in tests
---------
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Add option to use instance settings for number formatting
* Format row count in datagrid Footer with instance settings
* Format row count in datagrid Footer using instance settings
* Format row in question row count using instance settings
* Add unit test for number formatting with instance settings
* Fix unit tests
* Fix e2e tests
* Update Loki Snapshots
* Add useNumberFormatter hook
* Use useNumberFormatter hook
* Add test for useNumberFormatter
* Fix types
* Update Loki Snapshots
* Move useNumberFormatter to metase/common/hooks
* Add redux to DataGrid stories
* Add missing loki references
---------
Co-authored-by: Metabase Automation <github-automation@metabase.com>
We check for query cycles when saving cards, but the checker only understands mbql queries. If we have a native query
that depends on another query, the cycle checker won't go through the native query to see if it is causing a cycle.
Now, the checker understands native queries and can find cycles involving them.
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
Co-authored-by: Metabase Automation <github-automation@metabase.com>
* [Lib] Stop passing `:unique-name-fn` as an option
* Add extra test
* Fix column order
* Test fixes and PR feedback
* Fix output schema
* Test fixes!!!
* Test fix?? 🔧
* Fix file order
* Test fix
* Revert accidental e2e changes
* typo
* infer only one column per table to be entity name
* tests
* fix: test
* note
* fix: don't lose other classification results!
* regr test
* use count
* more tests
* fix: only consider active fields!
* also consider visibility_type
* perf: select only if needed
* style: reduce without atom
* style: cleaner
* SEM-239 Data model - Layout boilerplate (#57174)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* SEM-240 Data model - Table section (#57248)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Fix flaky unit tests
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* SEM-241 Data model - Field - Data section (#57420)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Navigation onClick
* Fix flaky unit tests
* Use a link
* Explain cast
* Improve url generation
* Style active link
* Load field, display name
* Sticky header
* Add SectionPill
* Add field name and data type
* Add cast toggle
* Add CoercionStrategyPicker
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* Casting toggle state sync
* CoercionStrategyPicker error state
* Extract FieldDataSection
* Reuse existing TextInputBlurChange
* Further cleanup
* Use key for FieldSection
* Lift data fetching
* Add decoration
* Use key for table as well
* Add unit tests
* Add unit tests
* Add unit tests
* Add comments
* Simplify color
* Use type instead of interface
* SEM-297 Drop entity framework usage in `SemanticTypePicker` (#57531)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Navigation onClick
* Fix flaky unit tests
* Use a link
* Explain cast
* Improve url generation
* Style active link
* Load field, display name
* Sticky header
* Add SectionPill
* Add field name and data type
* Add cast toggle
* Add CoercionStrategyPicker
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* Casting toggle state sync
* CoercionStrategyPicker error state
* Extract FieldDataSection
* Reuse existing TextInputBlurChange
* Further cleanup
* Use key for FieldSection
* Lift data fetching
* Add decoration
* Use key for table as well
* Add unit tests
* Add unit tests
* Add unit tests
* Add comments
* Drop entity framework in FkTargetPicker
* Make table names show up
* Clean up
* Fix types
* Fix table names
* Add tests
* Add tests
* Add tests
* Restrict imports
* Improve config
* Restrict entity framework imports
* Simplify color
* Use type instead of interface
* Lint
* SEM-267 Data model - Field - Metadata section (#57527)
* Add route and link
* Convert DataModelApp to TypeScript
* Use DataModelApp in DataModel
* Keep all routes
* Extract section components
* Add empty states
* Use ts-pattern
* Drop ts-pattern
* Disable preview
* Rename
* Add border
* Move page components to their own dirs
* Add table fetching
* Add NameDescriptionInput boilerplate
* Update table on blur
* Fix focus state and prevent empty names
* Add Hide this table switch
- Label from https://www.loom.com/share/45ce00aaac3f4141adf3f52dec79048f?highlightComment=80327135&t=271
* Style the Switch
* Move FieldOrderPicker
* Move SortableField
* Move NameDescriptionInput
* Make NameDescriptionInput more generic
* Use FieldOrderPicker
* Rename
* Move label into TableVisibilityInput
* Add missing return
* Add FieldOrder
* Get rid of entity framework workarounds
* Add TODO comment
* Make header sticky
* Sort
* Add field scanning section
* Discard + rescan
* Remove todo
* Remove TableVisibilityInput
* Rename FieldOrder to SortableFieldList and move it to metadata/components
* Implement getFieldIcon boilerplate
* Do not use metabase-lib/v1
* Extract tableFieldToColumnMetadata
* Fix focus state being cut off
* Extract RescanFieldsButton, add error and success states
* Extract DiscardFieldValuesButton
* Rename
* Move to metadata/components
* Style name/description input
* Add missing ttag
* Add NameDescriptionInput tests
* Add more tests
* Organize tests
* Add tests
* Add DiscardTableFieldValuesButton tests
* Add test
* Add RescanTableFieldsButton tests
* Lint colors
* Add tests for getItems
* Add tests for getFieldIcon
* Update comment
* Update test names
* Add missing effect
* Add missing effect
* Navigation onClick
* Fix flaky unit tests
* Use a link
* Explain cast
* Improve url generation
* Style active link
* Load field, display name
* Sticky header
* Add SectionPill
* Add field name and data type
* Add cast toggle
* Add CoercionStrategyPicker
* Remove getFieldIcon
* Extract TextInputBlurChange
* Update comment
* Casting toggle state sync
* CoercionStrategyPicker error state
* Extract FieldDataSection
* Reuse existing TextInputBlurChange
* Further cleanup
* Use key for FieldSection
* Lift data fetching
* Add decoration
* Use key for table as well
* Add unit tests
* Add unit tests
* Add unit tests
* Add comments
* Add Metadata section with display name input
* Pass table through components
* Drop entity framework in FkTargetPicker
* Revert "Pass table through components"
This reverts commit 2eb3e3a256.
* Make table names show up
* Clean up
* Fix types
* Fix table names
* Add tests
* Add tests
* Add tests
* Restrict imports
* Improve config
* Restrict entity framework imports
* Simplify color
* Use type instead of interface
* Use SemanticTypeAndTargetPicker in FieldSection
* Sort
* Lint
* Typing
* Do not use v1/metadata wrapper
* Add TextareaBlurChange
* Add description input
* Update comments
* Update icon
* Add plugin query props
* Remove redundant prop
* Remove redundant _.omit
* Fix textarea crashing due to min height on input
* Set minRows
* Fix styling
* Remove PLUGIN_FEATURE_LEVEL_PERMISSIONS plugin usage from DatasetFieldMetadataFkTargetPicker
- because that's not how it works in master
* Drop -v2 suffix for new routes, use -v1 suffix for old routes (#57637)
* SEM-242 Data model - Field - Behavior section (#57638)
* Drop -v2 suffix for new routes, use -v1 suffix for old routes
* Move FieldVisibilityPicker
* Make FieldVisibilityPicker work with api Field
* Use FieldVisibilityType
* Fix gap
* Update tests
* Add label and description
* Add FieldValuesTypePicker
* Add canUnfoldJson and hasDatabaseFeature
* Rename
* Add UnfoldJsonPicker
* Fix typing
* Add RescanFieldButton
* Add DiscardFieldValuesButton
* Style the connector
* Fix scrolling
* Update spacing
* Add tests for FieldValuesTypePicker
* Add tests
* Add UnfoldJsonPicker tests
* Add tests
* Add tests
* Clean up timeouts on unmount
* Improve typing
* SEM-269 Data model - Field - Formatting section (#57682)
* Drop -v2 suffix for new routes, use -v1 suffix for old routes
* Move FieldVisibilityPicker
* Make FieldVisibilityPicker work with api Field
* Use FieldVisibilityType
* Fix gap
* Update tests
* Add label and description
* Add FieldValuesTypePicker
* Add canUnfoldJson and hasDatabaseFeature
* Rename
* Add UnfoldJsonPicker
* Fix typing
* Add RescanFieldButton
* Add DiscardFieldValuesButton
* Style the connector
* Fix scrolling
* Update spacing
* Add tests for FieldValuesTypePicker
* Add tests
* Add UnfoldJsonPicker tests
* Add tests
* Add tests
* Add FormattingSection
* Sort
* Make formatting form full width
* Use style prop instead of maxWidth
* Clean up timeouts on unmount
* Improve typing
* Metadata preview boilerplate (#58015)
* Render preview
* Add preview type selector
* Fix flex layout
* Lift preview type to top component to keep the state
* Move helpers to utils
* Add unit tests for preview picker
* Add feedback to metadata editor when saving config (#58038)
* Add feedback to all table and field settings
* Add missing prop
* Metadata table and detail preview (#57887)
* Handle undefined metadata
* Render Table preview
* Add custom error component
* Add helper for error message
* Add detail preview
* Make comment more clear
* Fix type
* Fix missing props
* Metadata table picker (#57648)
* Set up TablePicker component
* Fix type in api
* Add initial TablePicker implementation
* Add schema icon
* Update url for datapicker
* Move data loading to utils
* Add loading node types
* Derive icon from type
* Try building the treepicker state asynchronously
* Build custom tree
* Add loading state
* Push url state in picker
* Sync open state with url
* Use helper to manage expanded state
* Split Node into separate file
* Expose prefetch hook
* Prefetch data to avoid showing loading states
* Add search to table picker
* Move search-related stuff into Search module
* Use Link for navigation
* Add renderLoading helper
* Remove unused prop
* Make search input sticky
* Add separate sidebar for field picker
* Render single schema but open it by default
* Translate errors
* Defer search value
* Export lazy loaders for database info
* Use top-level data fetching
* Enable virtualization
* Move loader utils into utils
* Remove Node implementation
* Simplify styles
* Pull out some logic
* Reuse results in search
* Reuse tree helpers when handling search results
* Avoid passing down isExpanded
* Memoize
* Fix initial expanded state
* Automatically expand single-schema databases
* Pass tableId to DataPicker
* Add styling for active item
* Add getUrl helper for tree nodes
* Move types to separate file
* Simplify item
* Rename Item to Results
* Simplify
* Allow wrapping everywhere
* Add loading state
* Render tracks
* Remove unused colors
* Scroll active item into view
* Fix paths
* Add missing keys
* Handle browser navigation in table picker
* Handle browser navigation in table picker
* Add more documentation
* Debounce search
* Render track even when no parent was found
* Allow rendering urls to schema's with no name
* Add value to loading nodes
* Add delay to track too
* Add explicit level to FlatItem
* Add explicit parent refence to FlatItem
* Hide nameless schemas in the tree
* Refactor
* Move key to top-level item
* Make TablePicker not depend on router
* Disable smooth scroll
* Add unit tests for TablePicker
* Unnest unnamed schemas directly
* Also fetch tables when only one schema exists
* Remeasure items when they change
* Use more precise typeing for items
* Allow clicking table nodes in search results
* Remove unused classes
* Remove unused useDispatch hook
* Remove delay on loading items
* Add custom empty state
* Typo
* Add keyboard navigation to table picker
* Use test helpers in all tests
* Add keyboard navigation to search results too
* Add custom focus state for search items
* Add unit tests for search
* Jump to parent when pressing left arrow
* Add more cases to keyboard test
* Add hover state to table picker
* Use table display name in table picker
* Flatten single schema in to database
* Rename onChange_ to handleChange
* Use folder for schema
* Make the hover and active colors the same
* Rename Data tab to Data Model
* Remove title
* Fix layout
* Field description editor (#58280)
* Use NameDescriptionInput for the field section too
* Use TextArea for description editor
* Post-merge fixes
* Metadata editing UI tweaks (#58297)
* Add background to fields
* Tweak colors for disabled inputs
* Remove icons in SectionPill
* Remove icon from one more SectionPill
* Remove lint
* Move segments to table picker (#58422)
* Add link to segments in the datamodel sidebar
* Add local state to RouterTablePicker
* Nest segments under DataModel
* Add wrapper classes to revision routes
* Fix spacing for empty state
* Add active state to segments link
* Remove DataModelApp in DataModel routes
* Fix overflow in segment form
* Merge translation strings
* Add background color to segments components
* SEM-363 Data model - Field and table name/description inputs should be sticky and have icons (#58703)
* Remove hover/focus effect and break components down into files
* Update comment
* Consolidate toasts
* Remove unused styles
* Remove redundant card
* Extract SegmentsLink
* Make name/description input sticky
* Add icons
* Remove leftovers
* Fix TS error
* Move visibility toggles to the table picker (#58284)
* Fetch hidden tables
* Fetch hidden schemas
* Add visibility toggles to the table picker
* Remove table visibility toggle in table section
* Simplify visibility toggler
* Move visibility toggle to separate file
* Add unit tests for visibility toggle
* Show table as hidden whenever there is any visibility
* Use ActionIcon
* Break up onClick handler
* Use plan Icon
* Remove data from nodes that don't need it
* Add tooltips to table visibility togglers
* Wrap icons in ActionIcon
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
* Cleanup
* SEM-361 Data model - Field metadata/formatting settings do not affect the preview (#58841)
* Fix SEM-361
* Fix types
* SEM-311 Table preview - no impact when changing time formatting for seconds and ms (#58927)
* Avoid using a breakout for date-time columns
* Use the same logic for every type of field
* SEM-246 Data model - Filtering preview (#58854)
* Fix SEM-361
* Fix types
* Add FilteringPreview boilerplate
* Use FilterPickerBody
* Another attempt
* Make it work for all types of filters
* Memoize query
* Clear filter input on field change
* Account for prop changes
* Fix TS error
* SEM-268 Data model - Field - Behavior section - Display values (#57684)
* Drop -v2 suffix for new routes, use -v1 suffix for old routes
* Move FieldVisibilityPicker
* Make FieldVisibilityPicker work with api Field
* Use FieldVisibilityType
* Fix gap
* Update tests
* Add label and description
* Add FieldValuesTypePicker
* Add canUnfoldJson and hasDatabaseFeature
* Rename
* Add UnfoldJsonPicker
* Fix typing
* Add RescanFieldButton
* Add DiscardFieldValuesButton
* Style the connector
* Fix scrolling
* Update spacing
* Add tests for FieldValuesTypePicker
* Add tests
* Add UnfoldJsonPicker tests
* Add tests
* Add tests
* Add placeholder
* Add RemappingPicker boilerplate
* Clean up timeouts on unmount
* Improve typing
* Add onChange logic boilerplate
* Extract DisplayValuesPicker
* Remove redundant code
* Format code
* Add fk input boilerplate
* Disable options instead of hiding them
* Rename
* Fetch required data
* Use full data
* Implement fk remapping onChange
* Implement naming tip
* Fix state
* Extract utils
* Fix schema step errors
* Add remappings boilerplate
* Fetch remappings
* Add more modal boilerplate
* Add modal props
* Handle modal state
* Add explicit edit button
* Implement modal form
* Limit amount of Boxes
* Bring all safety checks back in
* Refactor CustomMappingModal
* Style CustomMappingModal
* Extract getHasEmptyValues
* Remove todo
* Prevent flicker
* Fix initial state of fk picker
* Use is touched
* Add CustomMappingModal unit tests
* Add DisplayValuesPicker unit tests
* Move DisplayValuesPicker
* Remove redundant tags
* Fix uncontrolled/controller input react warning
* Add explanatory tooltips for disabled options
* Fix 1px of background leaking into view
* Add missing memoization
* Reset state when cancelling
* Sync single table via UI (#58342)
* add table-manual-sync event
* add table/sync_schema endpoint
* add table sync test
* Add api helper for the sync table schema endpoint
* Add SyncTableSchemaButton component
* Add SyncTableSchemaButton to table section
* Add unit tests for SyncTableSchemaButton
* Also invalidate field-values and parameter-values
* Simplify SyncTableSchemaButton hooks
* Move useTemporaryState into a separate hook
* Apply same pattern in all buttons
* address PR review comments: use `get-database`, `with-database-routing-off`
* Pass argument to useTemporaryState
* update test
---------
Co-authored-by: Nicola Mometto <nicola.mometto@metabase.com>
* Fix SEM-370 (#59051)
* Post-merge conflict fix
* SEM-329 Data model - Table section - Update fields sorting interaction (#59316)
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Pixel-perfect
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* SEM-376 Data model - Resizable columns layout (#59100)
* Format code
* Prevent updates when nothing changes
* Use new colors
* Make nav resizable
* Fix nav width
* Remove unused styles
* Prevent CLS in SortableList
* Add comment
* Get rid of second page component
* Make table column resizable
* Add padding and min width for the empty state
* Optimize
* Extract ResizableColumn
* Toggle preview
* Add preview and field resizing
* Extract getTableMetadataQuery
* Preview positioning and shadow
* Show scrollbar on preview overflow
* Fix resizing bounds
* Remove redundant props
* Handle Escape key
* Add comment
* Update default constraints
* Make preview non-resizable
* Fix valid Escape press detection
* Fix types
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Auto-grow table column when possible
* Auto-magic layout
* Fix sign
* Optimize
* Optimize
* Pixel-perfect
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* Fix interactivity in inputs
* Move memoization closer to component definition
* SEM-327 Data model - Move the re-scan / discard options away from the bottom of the fields list (#59474)
* Format code
* Prevent updates when nothing changes
* Use new colors
* Make nav resizable
* Fix nav width
* Remove unused styles
* Prevent CLS in SortableList
* Add comment
* Get rid of second page component
* Make table column resizable
* Add padding and min width for the empty state
* Optimize
* Extract ResizableColumn
* Toggle preview
* Add preview and field resizing
* Extract getTableMetadataQuery
* Preview positioning and shadow
* Show scrollbar on preview overflow
* Fix resizing bounds
* Remove redundant props
* Handle Escape key
* Add comment
* Update default constraints
* Make preview non-resizable
* Fix valid Escape press detection
* Fix types
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Auto-grow table column when possible
* Auto-magic layout
* Fix sign
* Optimize
* Optimize
* Pixel-perfect
* SyncOptionsModal
* Move
* Field values modal
* Responsiveness
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* Fix interactivity in inputs
* Move memoization closer to component definition
* Tmp
* Revert "Tmp"
This reverts commit 6e561c0de7.
* SEM-424 Tests parity - datamodel.cy.spec.js (#59548)
* Format code
* Prevent updates when nothing changes
* Use new colors
* Make nav resizable
* Fix nav width
* Remove unused styles
* Prevent CLS in SortableList
* Add comment
* Get rid of second page component
* Make table column resizable
* Add padding and min width for the empty state
* Optimize
* Extract ResizableColumn
* Toggle preview
* Add preview and field resizing
* Extract getTableMetadataQuery
* Preview positioning and shadow
* Show scrollbar on preview overflow
* Fix resizing bounds
* Remove redundant props
* Handle Escape key
* Add comment
* Update default constraints
* Make preview non-resizable
* Fix valid Escape press detection
* Fix types
* Add support for size="sm" in SegmentedControl
* Add field sorting interaction boilerplate
* Update FieldOrderPicker to use SegmentedControl
* Extract Label component
* Update tooltips
* Update sortable field
* Rename SortableField to SortableFieldItem
* Render field list
* Align styling
* Use rem, remove Link from SortableFieldItem
* Styling
* Use field prop
* Background styling
* Fix TS error
* Editable name and description
* Watch out for error
* Allow overriding default props in EditableText
* Fix a11y
* A11y
* Prevent overflow
* Styling
* Cleanup
* Update comment
* Fixes
* Update label and hide it in sorting mode
* Update spacing
* Avoid CLS when entering sorting mode
* Auto-grow table column when possible
* Auto-magic layout
* Fix sign
* Optimize
* Optimize
* Pixel-perfect
* SyncOptionsModal
* Move
* Field values modal
* Responsiveness
* Use ellipsis on overflow
* Fix colors
* Fix name input size
* Fix description patching
* Style selected state
* Do not use EditableText for description input, add resetOnEsc prop
* Port test
* Fix typing
* Port test
* Port tests
* Format code, add data-testid
* Port more tests
* Refactor withDatabase to TypeScript
* Await
* Fix prop handling
* Port test
* Memoize textarea for performance
* Port test
* Port tests
* Remove unlawful getFieldDisplayName usages
* ESLint
* Add JSDoc
* Port tests
* Port tests
* Format code
* Use flushSync instead of setTimeout
* Try to prevent event propagation
* Fix interactivity in inputs
* Fix interactivity in inputs
* Move memoization closer to component definition
* Tmp
* Revert "Tmp"
This reverts commit 6e561c0de7.
* Fix circular dependency
* Post-merge fix
* SEM-425 Tests parity - editor.cy.spec.js (#59838)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Simplify assertion
* SEM-426 Tests parity - reproductions.cy.spec.ts (#59970)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Simplify assertion
* SEM-427 Tests parity - remaining e2e suites (#59980)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Update test
* Update test
* Update test
* Update tests
* Update test
* Update test
* Update test
* Update test
* Update tests
* Update tests
* Typo
* Update unit tests
* Remove encodeURIComponent
* Make it clear what is schemaName and schemaId
* Rename schemaId to schemaName in table picker
* Update unit tests
* Update unit tests
* Skip soon-to-be-ported unit tests
* Attempt to fix a test
* Update test
* Update unit test
* Update test
* Revert refetching
* Data model - Simple flex layout (#59995)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Update test
* Update test
* Update test
* Update tests
* Update test
* Update test
* Update test
* Update test
* Update tests
* Update tests
* Typo
* Update unit tests
* Remove encodeURIComponent
* Make it clear what is schemaName and schemaId
* Rename schemaId to schemaName in table picker
* Update unit tests
* Update unit tests
* Skip soon-to-be-ported unit tests
* Attempt to fix a test
* Update test
* Update unit test
* Update test
* Revert refetching
* Try simple flex layout
* Update proportions
* Remove redundant elements
* Clean up
* Use ellipsis instead of wrapping
* Pixel perfect
* Tweak constants
* SEM-448 Tests parity - unit tests (#60042)
* Add DataModel helpers
* Update test
* Add waits
* Use schemaId in test helper
* Port tests
* Fix ids
* Add more helpers
* Use helpers
* Auto-open coercion picker, humanize coercion picker labels
* Update test
* Fix typing
* Fix data fetching
* Update tests
* Refactor
* Update tests
* Update helpers
* Update reproductions.cy.spec.ts
* Fix test
* Update test
* Update test
* Update test
* Update tests
* Update test
* Update test
* Update test
* Update test
* Update tests
* Update tests
* Typo
* Update unit tests
* Remove encodeURIComponent
* Make it clear what is schemaName and schemaId
* Rename schemaId to schemaName in table picker
* Update unit tests
* Update unit tests
* Skip soon-to-be-ported unit tests
* Attempt to fix a test
* Update test
* Update unit test
* Update test
* Revert refetching
* Try simple flex layout
* Update proportions
* Remove redundant elements
* Clean up
* Use ellipsis instead of wrapping
* Pixel perfect
* Tweak constants
* Add data model unit tests boilerplate
* Optimistically remove TODOs
* Use router
* Fix element rendering in tests
* Add tests + fixes
* Port tests
* Port a test, fix a util
* Port test
* Port tests
* Port tests
* Remove old tests
* Port tests
* Remove old tests
* Port tests
* Remove old tests
* Fix disabling tables in search results
* Fix flakes
* Update tests
* Remove redundant check
* SEM-434 Missing metadata in FieldDataSelector (#60262)
* Manually override tables prop and add missing properties to Field objects
- Fixes SEM-434
* Format code
* Use field.display_name
* Memoize tables
* SEM-462 Small tweaks (#60187)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Fix events
* Use prop instead of CSS
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Add comments
* SEM-460 Show prefix for JSON-unfolded columns (#60328)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Show prefix in FieldItem
* Show prefix in SortableFieldItem
* Fix events
* Handle ellipsis
* Show prefix in NameDescriptionInput
* Update tests
* Update types
* Use prop instead of CSS
* Improve responsiveness
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Add comments
* SEM-420 Organize e2e tests (#60379)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Show prefix in FieldItem
* Show prefix in SortableFieldItem
* Fix events
* Handle ellipsis
* Show prefix in NameDescriptionInput
* Update tests
* Update types
* Use prop instead of CSS
* Improve responsiveness
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Move segments to a separate spec
* Organize tests
* Add comments
* SEM-420 Organize e2e tests (part 2) (#60388)
* SEM-436 Make field description input auto-grow indefinitely
* SEM-438 Update icons for tables and fields
* SEM-439 Remove the first column with dashes from the field values preview
* SEM-441 Align color scheme for left navbar and right-side panes
* SEM-440 Have a loader for the Detail view preview
* SEM-437 Sorting mode tweaks
* SEM-446 Chips as section headers feel off
* SEM-445 Revisit the read-only version of field ID and DB name
* Make shadows exactly like in figma
* SEM-457 Top-align text with icon for tables with long names
* Remove redundant selector
* Pixel perfect padding
* Fix 'draggable' prop not kicking in
* Fix tests
* Fix flakes
* Update tests
* Add spinner when toggling table visibility and using predefined sorting order
* Show prefix in FieldItem
* Show prefix in SortableFieldItem
* Fix events
* Handle ellipsis
* Show prefix in NameDescriptionInput
* Update tests
* Update types
* Use prop instead of CSS
* Improve responsiveness
* Revert "Use prop instead of CSS"
This reverts commit 74f76d1b99.
* Move segments to a separate spec
* Organize tests
* Move tests
* Move tests
* Add comments
* Merge tests
* Move tests
* Use modern selectors
* Move tests
* Move tests
* Reorder tests
* SEM-420 Test new features (e2e) (#60439)
* Add new tests, simplify toasts, remove long prefix from utils
* Test toasts
* Reuse utils
* Add table picker test for no schemas
* Fix schemaless tables not shown in search
* Add sync options test
* Fix & test prefixes
* Add logs
* Format code
* Coercion strategy test
* Add tests for visibility
* Update assertions
* Add test for tooltips
* Field values tests
* Add tests for filtering
* Add preview assertion
* Refactor preview verification
* Fix showing 403 error in preview
* Add preview tests
* Add preview assertions
* Add preview assertions
* Add preview assertions
* Add preview tests
* Move modals and state handling, add tests for Esc key
* Update unit tests
* Use useDisclosure
* Add extra error status check
* Revert unnecessary changes in cross-version tests
* SEM-419 Increase test coverage (unit tests) (#60491)
* Add new tests, simplify toasts, remove long prefix from utils
* Test toasts
* Reuse utils
* Add table picker test for no schemas
* Fix schemaless tables not shown in search
* Add sync options test
* Fix & test prefixes
* Add logs
* Format code
* Coercion strategy test
* Add tests for visibility
* Update assertions
* Add test for tooltips
* Field values tests
* Add tests for filtering
* Add preview assertion
* Refactor preview verification
* Fix showing 403 error in preview
* Add preview tests
* Add preview assertions
* Add preview assertions
* Add preview assertions
* Add preview tests
* Move modals and state handling, add tests for Esc key
* Update unit tests
* Add FieldOrderPicker unit tests
* Add CurrencyPicker unit tests
* Add FkTargetPicker unit tests
* Add more tests
* Add SemanticTypeAndTargetPicker unit tests
* Remove redundant code
* Move RemappingPicker
* Use useDisclosure
* Add extra error status check
* SEM-247 Clean up old Table Metadata page code (#60557)
* Remove old metadata page
* Move humanizeCoercionStrategy
* Remove unused functions
* Fix SEM-484 (#60600)
* Revert unnecessary change
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
Co-authored-by: Nicola Mometto <nicola.mometto@metabase.com>
* Closes VIZ-1224 - Make dashcards use chart-specific skeletons (#60090)
* Updates Dashboard cards' loading state to use already-made chart-specific loading skeletons
* Adds SankeySkeleton
* Tweaks MapSkeleton so its fill color can be overridden
* Fixes double name issue in loading skeletons in pinned questions on collections page
* Closes VIZ-1230 - Trigger spinner state when card takes longer to load (#60359)
* Closes VIZ-1218 reset button on data sources
* resets to default only for single datasources cards
* e2e
* e2e
* removed TODO
* simpler
* disable reset btn when already pristine
* revert unnecessary changes to addDataSource
* QUE-1370: Convert AccordionList to TypeScript (#59463)
* Convert AccordionList components to typescript
* Fix types for Select
* Fix types for FilterColumnPicker
* Fix types for QueryColumnPicker
* Fix types for FormSelect
* Fix types for DataSelector
* Fix types for data-picker
* Fix types for AggregationPicker
* Move types into types module
* Simplify searchProp
* Use default export
* Fix info icons always showing
* Remove unused --accordion-list-width
* Rename T for clarity
* Parametrise Section type too
* Fix default label renderer
* Fix missing props
* Avoid calling in on non-object items
* Simplify maxHeight prop
* Move fallbacks into AccordionListCell
* Move shared props to shared type
* Sort props
* Remove styled component for AccordionList
* Rename _list
* Fix itemIsSelected signature
* Simplify callback
* Fix searchFuzzy prop default
* Fix schema picker callback
* Fix aria-selected for tests
* Omit filter description
* Fix loading state
* Remove unused searchFuzzy prop
* Remove unused searchCaseInsensitive prop
* Remove unused hideEmptySectionsInSearch prop
* Reduce this.props usage
* Do not pass aria-expanded to non-expandable items
* Rename AccordionList.unit.spec to tsx
* Remove get and use type guards
* Remove unused cast
* Rename ListItem to Item
* Avoid silly x variable name
* Fix incorrect base type for Item
* Define Item type
* QUE-1359: Add highlight when item has cursor (#59622)
* Add highlight when item has cursor
* Add repro
* Use _.times
* Test using computed style
* Use Cypress._
* QUE-1360: scroll selected item into view (#59617)
* Scroll items into view when selected
* Add e2e test for scrolling items into view
* QUE-1361: Allow using table in search and add fuzzy search (#59693)
* Flatten getRowsCached into getRows
* Use method directly in checkSectionHasItemsMatchingSearch
* Build search index when props change
* Memoize the fuse index
* Add fuzzySearch props to AccordionList
* Enable fuzzy search in Filter and Aggregation picker
* Add unit tests for fuzzy search
* Add fallback for searchProp
* Remove unused variable
* Use shallow equality for memoization
* Remove this.state
* Add tableName and tableDisplayName to filter picker search props
* Strictly type searchProp
* Fix type of default search prop
* Do not include results with bad score
* Search by custom property
* Avoid O(n²) search
* Lower the score
* Fix types in test
* Memoize search
* Pull out isSearching
* Sort results by score
* Export SearchProp types
* Coerce default search props
* Use SearchProp types in Select
* Move itemScore and sectionScore to utils
* Remove search state from state
* Simplify initial cursor method
* Fix cursor logic for sorted items
* Add comment on why a custom memoize function is needed
* Fix unit tests
* Add forwardRef back to AccordionListCell
* Make ref dependency explicit
* Fix broken merge
* Correctly move cursor through rows
* Move searchFilter into getRows
* Fix missing rows
* Lower the search threshold
* Always show section when it has a type
* Move searchThreshold to constant
* Use includes
* Remove unused type fields
* Rename index.js to index.ts
* Refactor search
* Fix types
* Simplify ItemScores
* Allow customizing threshold in strategy
* Enable fuzzy search for query column picker
* Fix substring search
* QUE-1363: Custom expression fallback (#59992)
* Add clausesForMode helper
* Add custom expressions to filter picker
* Do not require helpText for snippets
* Remove helpText arguments from expression completions
* Export expressionClauseSnippet helper
* Allow opening expression editor with custom clause snippet
* Pass expression clause to custom expression editor
* Fix types
* Add onSearchTextChange to Accordionlist
* Select expression clause when typing (
* Only show expression clauses while searching
* Always sort expression clauses last
* Remove reportTimezone arg where no longer needed
* Add expression functions to aggregation picker
* Import underscore as _
* Rename filter
* QUE-1414: Fuzzy search tests (#60257)
* Add test for fuzzy matching in filter popover
* Add tests for picking custom expression in the filter picker
* Add test for selecting expression in aggregation picker
* Add test for selecting items in AccordionList while searching
* Verify that typing non-existing clause does nothing
* Typo
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
* QUE-1468: Sticky search in AccordionList (#60190)
* Make the search bar floating
* Remove overflow override
* Correctly set width
* Pass width as direct prop
* Use sticky modifier
* Make search sticky in virtualized list
* Add scroll padding for search bar
* Do not scroll searchbar into view
* Use scrollIntoView vs scrollTo
* Pass maxHeight to scroll container directly
* Remove scrollTo in tests
* Use correct scrolling container
* Remove duplicate sticky style
* Unwrap accordionpicker
* QUE-1413: Colum completion prefix (#59921)
* Allow searching by table name in custom expression completions
* More strictly filter results
* Fix unit tests
* Also disable filter on functions
* Fix unit tests
* Add lower weight to displayLabelWithTable
* Fix e2e tests
* Fix e2e test
* Use display value from longest match
* Copy indices to avoid readonly error
* Fix e2e test
* Preserve option identity
* Use first match to render
* Undo e2e test changes
* Fix e2e test
* Allow matching columns names via long display name too
* Use displayLabel
* Increase score threshold
* Fix unit tests
* Remove missing key error
* Memoize fuzzyMatcher
* Fix e2e test
* QUE-1518: join picker custom search (#60493)
* Allow searching by table name in QueryColumnPicker
* Fix scroll on QueryColumnPicker
* Add custom expressions to join column picker
* Allow selecting expression with ( in QueryColumnPicker
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
* fix: optionally add can_run_adhoc_query in items
Allow the can_run_adhoc_query parameter to be optionally included in the
collection items response, so that targets that are not valid for ad hoc
queries can be removed from the picker in the UI.
* split up large test
* Do not show error when snippet is active
* Add test for hiding errors while snippet is visible
* Also suppress error underline when snippet is active
* vertical cartesian well -> ok
* put the logic in a hook and handled hortizontal well
* added unit tests and handled other types of wells
* reorg and style
* css tweak
* Closes VIZ-1244 Wells light up upon dragging on them, even if the column won't map
* no outline
* Closes VIZ-1216 bubble size well style (#60380)
* fixes wrong drag overlay
* much better fix for draggig overlay
* tpyo
* removed useless cast
* removed comment
* refactored test
* Closes VIZ-1208: smarter detection of selected columns
* no breakout when more than one metric
* no breakdown when more than 1 metric if new col is not date
* combo _is_ cartesian
* [m.lib.fe-util] Introduce match-lite to reduce CLJS bundle size
* [m.lib.filter] Replace match-one with match-lite
* [m.lib.remove-replace] Replace match-one with match-lite
* Replace match-one with match-lite on all CLJC files
* Introduce the option to add data from the sidebar via "Add data" modal (#58408)
* Add CSV panel to the "Add data" modal (#59008)
* Add Metabase storage upsell to upload CSV panel (#59901)
* Add unit test coverage for the missing collection utils (#59902)
* Consolidate analytics around databases, CSV uploads and Google Sheets (#59996)
* Add Google Sheets management tab to the _Add data_ modal (#59905)
* remove stray `t2/debug`
* fix flaky notification send test
another thread was responsible for popping off the queue so there was a
race condition here.
* fix flaky test for not calling DB
i feel bad about this but this seems to be a reasonable solution given
the situation.
Any endpoint that gets some setting inside it might emit an extra SQL
query or two. So we can't reliably check to see whether hitting a given
endpoint hits the DB.
What we can do is hit it a few times and make sure one of those times
didn't hit the DB. Which is silly... but yeah.
Tests fail in CI which try to set timezones in mysql to "alias" types:
'US/Pacific', etc
```
❯ grep "Failed to set timezone" test-log_formatted.json | jq -r '.message'
Failed to set timezone 'US/Pacific' for :mysql database
Failed to set timezone 'US/Pacific' for :mysql database
Failed to set timezone 'US/Pacific' for :mysql database
Failed to set timezone 'US/Eastern' for :mysql database
Failed to set timezone 'US/Hawaii' for :mysql database
Failed to set timezone 'US/Pacific' for :mysql database
Failed to set timezone 'US/Pacific' for :mysql database
Failed to set timezone 'US/Eastern' for :mysql database
```
on mysql image from circle CI:
```
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2025-07-03 02:00:48 |
+---------------------+
1 row in set (0.01 sec)
mysql> SET @@session.time_zone = "US/Pacific";
ERROR 1298 (HY000): Unknown or incorrect time zone: 'US/Pacific'
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2025-07-03 02:10:25 |
+---------------------+
1 row in set (0.01 sec)
```
on mysql's official image for 8.0:
```
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2025-07-03 13:51:36 |
+---------------------+
1 row in set (0.00 sec)
mysql> SET @@session.time_zone = "US/Pacific";
Query OK, 0 rows affected (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2025-07-03 06:51:41 |
+---------------------+
1 row in set (0.01 sec)
```
This happened because circle ci bumped the base image to ubuntu 22 in
511bd63787
and this has different timezone information.
Here's timezone data in their 8.0.32 image
```
ls -l /usr/share/zoneinfo/US/Pacific
lrwxrwxrwx 1 root root 22 Feb 14 21:25 /usr/share/zoneinfo/US/Pacific -> ../America/Los_Angeles
```
and in 8.0.42 (alias to latest 8.0 at time of writing)
```
ls -l /usr/share/zoneinfo/US/Pacific
/usr/bin/ls: cannot access '/usr/share/zoneinfo/US/Pacific': No such file or directory
```
Mysql's official images still have these legacy timezone aliases
The mu/fn macro produces instrumented code, whose tail catches java.lang.Exception to clean up their stacktraces. This is obviously not possible in clojurescript. This adjusts the code to detect whether or not it's compiling for Clojurescript or Clojure and tweak the expansion appropriately.
* Typo in name
* Test an implement iso and simple mode strings
* Implement simple coercion strategy for sqlite
* Implement simple coercion for clickhouse
* Implement simple coercion for vertica
* Try wrapping strings with h2x/literal
* Fix athena
* Fix Vertica concatenation
* Try other clickhouse fix
* Let's try to fix hive-like
* Typo in clickhouse!
* Fix vertica
* Smarter parsing.
* Oops extra paren
* use parseDateTime() for clickhouse
* Add snowflake.
* Fix insane Snowflake test.
* Add databricks sqlite and vertica to test
* Tests, yo
* We need all sql+mongo to support bytes
* Remove redundant limit
* Implement bytes->temporal for hive-like
* Add more dbs to bytes->temporal test
* WIP
* Update frontend schema
* Remove printlns because it's poluting the test logs
* Presto uses LocalDateTime
* Starburst uses LocalDateTime
* Use zoned tiem for sparksql
* Snowflake binary dataset type
* Sqlite BLOB datatype
* SQL Server binary type
* Add vertica binary type
* SparkSQL binary type
* BigQuery binary type
* Capitalize clickhouse binary type
* Try a different type for SparkSQL
* Implement temporal bytes coercion for sqlite
* Implement temporal bytes coercion in sql server
* Add Sqlite binary dates expectations
* Change date type for sparksql expectation for simple datestring
* Implement temporal bytes coercion in vertica
* Implement temporal bytes coercion for Oracle
* MongoDB temporal bytes coercion
* Vertica uses cast as VARCHAR, not to_char()
* Oracle binary date expected return type
* Cut off multiple databases that can't convert temporal bytes to datetimes
* kick ci
* Allow all databases except athena
* Save some code for later
* Athena temporal string coercion (simple)
* Better comment
* Clean up tests
* Use more dispatch values and implement bytes tests
* Implement isobytes coercion strategy
* Test that drivers without binary temporal coercion throw exceptions
* Fix expectation for h2 and postgres
* Implement iso bytes in mongo
* Implement iso bytes in Oracle
* Implement binary iso coercion for hive-like
* Update expected return from h2 and postgres
* Implement binary iso coercion for Starburst
* Implement redshift and presto binary iso coercion
* Remove hive-like implementation for bytes coercion
* Rename bytes-iso and bytes-simple to isobytes and simplebytes
* Implement mode dispatch for datetime
* Fix Oracle typo
* Implement sqlite binary coercion
* Update frontend text.
* Update enum
* Normalize strings to keywords in legacy
* Clean up
* Clean up databricks bytes ingestion.
* Clean up more
* Improve syntax for valid modes check
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* Improve text
* Add fe tests for mode strings
* Complete coercion strategy code
* Avoid directly referencing driver names
* REmove unused mode string + correct validation logic
* Better feature keywords
* Frontend test for binary cast
* Appease the Kondo
* Improve fe test
* Build new ad hoc question with native question as source
* Fix types
* Fix test description
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* Remove refresh, fullscreen, and by extension, the nightmode toggle from SDK
* remove SDK_DASHBOARD_VIEW_ACTIONS
* Refactor tests and stories to be a little easier to debug something like this, and use explicit keys for the dashboard actions
* Fix up a thing
* Fix unit tests
---------
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
* wip
* save progress
* TEMP COMMIT
* go another direction
* add tests, remove debugging colors
* clean up
* add a few more unit tests
* try rounding down
* fix scrollbar flickering for some users, cancel pending animation frames on unmount
* implement updated styling, refactor out error messages from message state to better control error formatting, refactor out thinking and message components from MetabotChat
* finish things up
* unit tests for tool call logic
* add missing test around message clearing after error
* fix copy in e2e test
* Create UpsellDevInstances for Embeddings pages
* Add dev instance upsell to general settings
* Add dev instancles banner
* Hide upsell in in dev mode
* Add StorePaths type
* Update links for dev instances banner
* Update store link for upsell dev instance
* Refactor DevInstanceBanner to use translation function directly for text and external links
* Add unit tests for DevInstanceBanner component
* Refactor imports for UpsellDevInstances across embedding settings components
* Refactor DevInstanceBanner to use a reusable BannerBody
* Replace ExternalLink with Anchor in DevInstanceBanner
* Add jsdoc to getStoreUrl function
* Add target blank to store url
* links and link fixes
* Update docs/dashboards/subscriptions.md
Co-authored-by: Alex Yarosh <alexandra@metabase.com>
---------
Co-authored-by: Alex Yarosh <alexandra@metabase.com>
* update deps
* initial date migration
* default portal reuse target node to false
* remove timezone from MonthYearPicker value
* date picker adjustment for timezone
* unit tests
* fix Quarter Picker Types
* re-apply patch, fix up unit tests
* last adjustments?
* `annotate` middleware => MLv2
* Test fixes
* Fix#42307
* Add `lib.join/rename-join`
* Continue to iterate on `annotate` rewrite
* Squash #58712
* Less test noise
* Revert "Squash #58712"
This reverts commit 9c8d170aa4.
* Only one test failure to go!
* Add more documentation; code cleanup
* Improved column looping code.
* Test fix 🔧
* Code cleanup
* Use existing Join renaming code.
* FIX QUE-1330
* Fix#30397 / QUE-147
* Kondo cleanup
* Test fixes.
* 13384 assertions, 81 failures, 47 errors.
* 13373 assertions, 48 failures, 28 errors.
* 13400 assertions, 48 failures, 15 errors.
* 13391 assertions, 48 failures, 12 errors.
* 13401 assertions, 22 failures, 11 errors.
* 13404 assertions, 20 failures, 6 errors.
* 13407 assertions, 13 failures, 6 errors.
* 13414 assertions, 11 failures, 8 errors.
* 13412 assertions, 10 failures, 8 errors.
* Minor code cleanup
* Minor code cleanup
* 13412 assertions, 10 failures, 5 errors.
* Fix Kondo errors
* 13411 assertions, 10 failures, 5 errors.
* 13404 assertions, 7 failures, 5 errors.
* 13411 assertions, 3 failures, 5 errors.
* 13399 assertions, 2 failures, 5 errors.
* 13396 assertions, 2 failures, 4 errors.
* 13424 assertions, 2 failures, 2 errors.
* Test cleanup
* Fix deps graph
* Update lib module config
* Cleanup
* Kondo cleanup
* Minimize diff
* 13421 assertions, 3 failures, 2 errors.
* Nice refactor of big hairball test
* More beautiful refactoring
* 13474 assertions, 0 failures, 1 errors.
* Fix linter error
* Remove unused `:aggregation_index` column
* Test fixes
* Test fixes 🔧
* 14547 assertions, 1 failure, 1 error.
* Fix calling the zero arity of unique-name-generator twice
* Handful of test fixes 🔧
* Fix :converted-timezone for :convert-timezone with 3 args instead of 4
* Fix metabase.queries.api.card-test/renamed-column-names-are-applied-to-json-test
* Split up mega test
* Split up another large test
* Fix error message
* Resolve#39887. 14536 assertions, 1 failure, 0 errors.
* WOW! Is everything green now??
* Test fix 🔧
* Update issue IDs
* Update more issue IDs
* PR feedback
* A test fix 🔧
* Another test fix 🔧
* More test fixes 🔧
* Formatting
* Test fixes 🔧
* Test fixes 🔧
* More test fixes 🔧
* Less nonsense
* 6618 assertions, 115 failures, 16 errors. [Lib]
* 6637 assertions, 3 failures, 16 errors.
* 8208 assertions, 3 failures, 0 errors. [Lib]
* Almost ready??
* [Lib] 8216 assertions, 0 failures, 0 errors.
* [QP] 5330 assertions, 21 failures, 31 errors.
* [QP] 5344 assertions, 8 failures, 2 errors
* Fix QUE-1380
* Fix QUE-1410
* [QP] 5344 assertions, 8 failures, 1 errors.
* 5345 assertions, 2 failures, 1 error.
* Proper deduplication in field resolution; also, add some normalization tests
* 13563 assertions, 1 failure, 0 errors.
* 13579 assertions, 0 failures, 0 errors.
* Kondo & cljfmt
* Kondo
* Test fixes 🔧
* Disallow duplicate expression names (QUE-1412)
* Test fixes 🔧
* Test fix
* Fix QUE-1418
* Fix error messages about inline-value with MongoDB
* Fix Redshift test failure
* Fix Athena test
* Fix BigQuery tests
* Fix dumb test failure
* Card source-model-cols should work for Cards without a query.
* Fix MongoDB
* Fix Druid
* Fix some busted code formatting.
* Fix column names
* Fix column names
* Do type inference for native queries with MBQL stages if the driver returns all :type/*
* Fix column names
* Fix column names
* Fix column names
* Druid test fixes 🔧
* More test fixes 🔧
* Update more FE tests
* MBQL 5 map normalization should not normalize nil values
* Support new `:decode/mock` key for mock metadata provider
* Split up unrelated large test
* Don't add :was-binned false to refs
* Clean up the display name calculation logic for column metadata
* Update binning middleware to use 'better' column resolution logic in lib.field.resolution
* Don't calculate different display names in QP results metadata
* Properly convert join :source-metadata
* Update expected display name
* Revert making test too complicated
* Simplify the remove-inactive-field-refs middleware
* Misc code cleanup and test fixes 🔧
* Appease whitespace linter
* Add test to make sure Lib result metadata merges in :info :metadata/model-metadata
* Literally an insane number of new tests
* Add `:lib/original-display-name` to column metadata schema
* Improve error message for fix-bad-references when you use Field ID ref with native source query
* Improved field resolution logic
* Card should NOT add :lib/original-display-name all willy-nilly
* Add `:lib/source-display-name` and `:lib/ref-display-name`
* FINALLY fix display name logic??
* Revert making things private (thanks for lying to me LSP)
* Test fixes 🔧
* Remove `:lib/hide-bin-bucket?`
* Test fix
* Update notebook helpers
* Always use LONG display names for columns from the previous stage.
* Fix metabase.query-processor-test.nested-queries-test/space-names-question-test
* Make sure we use correct display names for implicitly joined columns
* Make sure BINNING gets propagated with `:lib/original-binning`.
* Make sure we correctly calculate if a column is inherited or not.
* Make sure binning info is returned in QP results and other misc fixes
* Do NOT return join alias info for columns that come from implicit joins.
* Update tests
* Some test fixes
* Don't generate wacky default join aliases
* Test fixes 🔧
* Fix more tests
* Prettier
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Use 'Unknown Field' as display name for unknown fields
* Fix incorrect use of expression refs
* Mark selected columns correctly
* cljfmt
* Update/fix backend tests again
* More fix selection fixes 🔧
* Fix equality matching for join columns
* Update tests
* Fix Kondo
* Fix line-bar-tooltips.cy.spec.js
* Add transducer version of u/index-by
* Some PR feedback
* Fix joins-reproductions.cy.spec.js 🔧
* Kondo cleanup
* Fix multiple-column-breakouts.cy.spec.ts
* Update tests
* Update tests not to expect :ident
* Update test not to expect duplicate columns
* PR feedback.
* More test fixes.
* IDK, maybe this is the last round of fixes. 🔧
* Support normalizing parameter dimensions
* Test fixes 🔧
* Fix CLJS code
* One last fix for column equality
* Update a couple of e2e tests
* Another test update
* Fix the test
* remove duplicated spec
* Even more tests (1 million tests)
* cljfmt
* Add test to make sure breakoutable-columns does not include remaps
* Fix Kondo
* skip failed tests
---------
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
* Enable the :expression-literals feature for the mongo driver
* Wrap :value expressions in $literal when compiling for mongo
* Add mongo compile-cond and compile-filter impls for :expression, :field, and :value
* Better codegen of compile-filter and compile-cond for :expression, :field, and :value on mongo
* Review feedback: hash-map -> array-map
* dev: bigquery static datasets
* Check every two days
* Fix var
* Fixes for sql params and test fixes
* Fix tests
* Fix tests
* Add logging for test debug
* Fix time range
* Fix default dataset check
* Fix dataset name replace
* Ignore exceptions on tracking in case of could not serialize error
* Fix kondo
* More kondo fixes
* Update translation sources 2025-06-26
* Update translations
* comment out locale with wrong format
* let's try to just rename it?
* et
* dont import estonian (yet)
---------
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Nicolò Pretto <info@npretto.com>
Co-authored-by: Ryan Laurie <iethree@gmail.com>
* Adjust License Token setup step
# Conflicts:
# frontend/src/metabase/setup/components/LicenseTokenStep/LicenseTokenForm.tsx
* Add License Token Step tests
* Accessbility improvements
* Use button for skip
* Fix setup flow tests
* Fix e2e setup tests
* Use existing store url and unstyled button
* fix selector usage
* Make the token error test more specific
* Simplify the full width divider styling
* Simplify Popover styles
* Fix the store link
* Use plain Button for skip
* Follow the setup pattern in tests
* Improve copy text
* Provide translation context
* Use HoverCard component instead of Popover
* Don't display license token hover card by default
* fix: collection archive/move w/out parent perms
Allow users to archive and move collections even when they do not have
read-write permissions on the parent collection.
* fixup! docstring feedback
Fixes#59778
Previously this was always rounded to `:day` for a single absolute
datetime filter. (Absolute date ranges already respected the times if
provided.)
* inc perms revision number on collection creation
also delete a misleading comment about data permissions.
The `before` and `after` fields here will be blanked out. This is
unfortunate, but this is a strictly better state of affairs from before,
when the change to permissions would not be recorded at all. At least
now we will record that it happened, and concurrent changes to the
permissions graph will fail instead of succeeding with odd/unexpected
behavior.
We'll add a remark to the revision to explain why it was created.
Co-Authored-By: Ed Paget <ed@metabase.com>
* Add tests for new behavior
Co-Authored-By: John Swanson <john.swanson@metabase.com>
---------
Co-authored-by: John Swanson <john.swanson@metabase.com>
* Improve chart context
* Send query
* Send display type
* Refactor existing code to only provide query once and not send display type on the root
* Only fetch metabot context if plugin is enabled
The query processor would explicitly return `nil` when a query was canceled, but then that `nil` would cause an `AssertionError` to be thrown. This is no longer the case.
Discussion metaboat.slack.com/archives/C0669P4AF9N/p1750783492043299
With this change we only run driver tests if:
on master or release-* branches
PRs labeled with .Team/Drivers, .Team/Querying, or .Team/SemanticLayer
Apparently, it is possible to get collection: null in a card's dataset query. It is unclear why this happens, but
this change ensures that nothing will break when it does happen.
In the past, we have run CI, and local testing with two enterprise tokens:
- all features
- no features
And this really doesn't reflect most real-world scenarios very well. We should be testing with tokens that have actual sets of features that are used in the wild, namely:
- starter cloud
- pro cloud
- pro self-hosted
Some bleeding-edge features that have not yet been implemented into our commercial plans will need to be tested with an all features token still.
This commit updates our testing helpers to use a paradigm that more accurately reflects real-world usage scenarios. Instead of setting specific features for a test, you activate a specific token.
* add BE code
* port over most of code from branch metabot/streaming w/o tests + making changes for supporting both normal requests and streamed ones
* improve test coverage, bug fixes, add support for analyze chart, error handling changes
* small bit of clean up + add unit tests for streaming
* fix some subtle bugs around request cancellation and stream processing
* Remove debugging logs
* fix be lints and things
* Improve ai service response streaming code
- Wrap initialization of response-lines reader with with-open to automatically close it after the response is done
- Remove Thread/sleep code
* Update modules config to register usage of the server module
* Remove request body destructure in the agent-streaming endpoint
* Fix reflection error
* Expand the docstring for the streaming-request function
* sort namespaces
---------
Co-authored-by: Mihael Konjevic <konjevic@gmail.com>
* Add migration to add metabase_field_user_settings table
* Add FieldUserSettings model, handle updates to Field transparently
* Add test
* TODO
* we can't user after-update, as it doesn't reflect the proper model
write through
* respect user schema during fk sync
* test via put endpoint
* comments
* fix
* FieldUserSetting serialisation test
* fk sync test
* simplify
* PoC with realizing set of fks
* add test case
* wip: using tmp table
* unique tbl
* update test
* fix for h2
* table-by-table
* style
* fix test
* stronger test
* fix for mysql
* Add migration to add metabase_field_user_settings table
* Add FieldUserSettings model, handle updates to Field transparently
* Add test
* TODO
* we can't user after-update, as it doesn't reflect the proper model
write through
* respect user schema during fk sync
* test via put endpoint
* comments
* fix
* FieldUserSetting serialisation test
* fk sync test
* simplify
* fix: clean user-set coercion-strategy/semantic-type on base-type update
* add extra test
* VIZ-1114 Updates cartesian graph lines so they're subtler in fullscreen night mode in a way that also allows them to be defined separately from the border color (if desired) in the embedding sdk
* Update Loki Snapshots
---------
Co-authored-by: Metabase Automation <github-automation@metabase.com>
? is used as a jdbc parameter placeholder and is also an operator in postgres. If you want to use it as an operator,
you often need to escape it with ??. This gives a better error message when that happens.
* Add blue dot attention notice to events icon links
* Fix Collection Header tests
* Adjust offset of inidicators to bring them closer to icons
* Improve test by with better API usage
Fixes#59394.
If the card we're trying to use for parameters values has an explicit `:fields` clause, that was surviving into
the final query, which causes us to generate bad SQL and throw a 500. This discards the `:fields`, which aren't
relevant when we're overwriting the query's last stage with a single breakout.
* This PR addresses design feedback from @kdoh
* Show toasts on dictionary upload/download success and failure
* Move localizing user-generated content to its own settings section
* tests
---------
Co-authored-by: Nick Fitzpatrick <nickfitz.582@gmail.com>
* Lift onFormatQuery to NativeQueryEditor
* Pass onFormatQuery to codemirror editor
* Lift canFormatQuery to NativeEditor
* Add format expression keymap to custom expression editor
* Add shortcut documentation
* Add helper to get NativeEditor value
* Add test for formatting using shortcut in native editor
* Add test for formatting in the custom expression editor via shortcut
* Do not allow formatting invalid expressions by shortcut
* Add test for invalid expression
* Wait for format button to be visible
* REmove unused var
* Perform the realPress on the cm editor
* Change order of keyboard event handling so that Ctrl+F handler does not kick in when pressing Ctrl+Shift+F
* Replace search keymap for native editor
* Add CodeMirror wrapper
* Use wrapped CodeMirror in NativeQueryEditor
* Use wrapped CodeMirror in custom expression editor
* Use wrapped CodeMirror in CodeEditor
* Export more from CodeMirror module
* Use highest precedence for shortcuts
* Add support for highlighted ranges to common CodeMirror editor
* Use highlightRanges prop
* Simplify code editor
* Use highlightRanges prop in Native editor
* Add highlight class
* Move shared codemirror style to CodeMirror module
* Move tag out of :global block
* Add missing import
* Fix background color
* Simplify highlights deps
* Move autofocus, autocorrect and tabIndex plugin to shared CodeMirror editor
* Disable autocorrect in SQL editor
* Memoize basicSetup
* Add snippet shortcuts
* Remove unnecessary lowercase
* Use type guard
* Addd types file
* Rename util to utils
* Destructure extension from props
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
This fixes a couple small typos and makes a few other changes while I was at it. I made the little math expressions consistent, and changed the text under "How…" since it only talks about count at first.
* test db routing on dbs which support it
* remoev an extra newline
* remove hardcoded clickhouse addition
* Remove database routing support from a few more drivers
Some of these are artifacts of no data-loading support in tests and they
can be reenabled when that works:
- databricks: multi-catalog so similar to clickhouse
- presto: data loading
- spark: multi-catalog so similar to clickhouse
- vertica: dataloading
* Turn off in athena, bigquery, oracle, redshift
Change dataset name since "table" is reserved in bigquery
- athena: data loading issue. Can't diagnose yet if this is similar to
other cloud databases.
- bigquery: includes database in query in tests. Seems not in real life.
```sql
SELECT `v4_router_data__transient_1750437202857.t`.`id` AS `id`,
`v4_router_data__transient_1750437202857.t`.`f` AS `f`
FROM `v4_router_data__transient_1750437202857.t`
LIMIT 1048575
```
- oracle: unknown. i suspect a data loading issue
- redshift: includes database in query. But i think
this might be a testing artifact: we aren't creating a database each,
but a schema each and faking it. Which violates the expectation of
db-routing. So this is a testing artifact
```sql
SELECT
"schema_173"."airports_airport"."id" AS "id",
"schema_173"."airports_airport"."name" AS "name",
"schema_173"."airports_airport"."code" AS "code",
"schema_173"."airports_airport"."latitude" AS "latitude",
"schema_173"."airports_airport"."longitude" AS "longitude",
"schema_173"."airports_airport"."municipality-id" AS "municipality-id"
FROM
"schema_173"."airports_airport"
LIMIT
1048575
```
* disable snowflake
includes databases in its queries:
```clojure
(defn- query-db-name []
;; the store is always initialized when running QP queries; for some stuff like the test extensions DDL statements
;; it won't be, *but* they should already be qualified by database name anyway
(when (driver-api/initialized?)
(db-name (driver-api/database (driver-api/metadata-provider)))))
;; unless we're currently using a table alias, we need to prepend Table and Field identifiers with the DB name for the
;; query
;;
;; Table & Field identifiers (usually) need to be qualified with the current database name; this needs to be part of the
;; table e.g.
;;
;; "table"."field" -> "database"."table"."field"
;; This takes care of Table identifiers. We handle Field identifiers in the [[sql.qp/->honeysql]] method for `[:sql
;; :field]` below.
(defn- qualify-identifier [[_identifier identifier-type components, :as identifier]]
{:pre [(h2x/identifier? identifier)]}
(apply h2x/identifier identifier-type #_(query-db-name) components))
```
* actually disable for snowflake
* VIZ-1099 Increases font-size of dash card titles
* VIZ-1099 Adds additional padding above card titles per design feedback
* VIZ-1107 Updates dashboard tabs to more closely match our standard tabs component
* VIZ-1107 Makes contrast less jarring for dashboard tabs in night mode while preserving embedding sdk customizability
* Update Loki Snapshots
---------
Co-authored-by: Metabase Automation <github-automation@metabase.com>
* feat: Add debugger API for card permissions
* fixup! initial set of PR feedback fixes
* fixup! add more information to data
* fixup! simplify queries
better arg names and docstring
* fixup! whitespace lint
Clickhouse's databases are more like schemas, and Database Routing is
not working correctly.
For now, let's disable Database Routing for Clickhouse. In a followup PR
I'll write tests for other drivers to make sure DB routing is working
for them, if not we can disable them as well.
Updates the secrets references to the
- "all features" token
- "no features" token
They are now using newly generated tokens. Respectively:
- `MB_ALL_FEATURES_TOKEN`
- `MB_STARTER_CLOUD_TOKEN`
* chore: all permissions module access through core
* fixup! break circular dep
* fixup! some other broken kondos
* fixup! revert collections changes
* fixup! remove dynamic var from public api
This macro does not do anything any longer the dynamic var it set is
only readed through the `update-card!` path and it was only used in a
path that called `t2/update!` instead.
Fixes#59441.
Previously this was matching against the `returned-columns` of the
previous stage, but that's incorrect. Since we're trying to match stage
`k` refs we must match against stage `k` columns, not stage `k-1`.
* Code cleanup
* Moves query analyzer to metabot-v3 module
* Consolidates SQL query analysis functionality under the metabot-v3 module to reduce cross-module dependencies
* Properly hydrate and pass schema for tables used in the native query for Metabot
* Adds tests
* Do not rely on is_native flag for fetching database schema in Metabot context
* update people nav
* type fix
* use modern upsell
* fix e2e test, cleanup
* wider pages
* update tests
* update unit tests
* update titles and nav
* limit description width
* little updates
* Localize the trash name on memoized collection
* just defer translation on the `trash-collection`
When we're getting it explicitly rather than for all collections - for
the sake of speed here, since this was causing some issues with
serialization.
* parallelize
* docstring
* VIZ-162 Updates percent calculation for stacked bar charts’ tooltips for bars with a mix of positive and negative values. Positive values are a percentage of the positive total and negative values are a percentage of the negative total.
* VIZ-162 Updates e2e tests to verify new stacked bar chart behavior
shorten filename to not overflow byte limit in some filesystems
in particular ext4 limits file name by 255 *bytes*, not chars, which is doable by using 3-byte chars
fixes#59233
* set embedding-homepage visible as soon as we can
* cleanup test
* reorder because it makes more sense
* Update frontend/src/metabase/setup/components/EmbeddingSetup/steps/UserCreationStep.tsx
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: Phoomparin Mano <poom@metabase.com>
* Fix can't download static SQL question\
when a parameter only expects a single value
* Ignore `?locale` search param in result downloads
* Finish the comment
* Fix public action tests failing
* Address review: Call side-effect explicitly
* Preserve same behavior
* Flip boolean to make it easier to read
* Improve boolean condition
* revert the use of `isEmbeddingSdk` env until #59602 is fixed
* Add missing condition to retain the same behavior
* Fix more failing tests duh!
* Fix should sync logic for real this time.
* Update upgrading-metabase.md
Adding a note about upgrading between major versions
* Update upgrading-metabase.md
* Apply suggestions from code review
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
---------
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
* Add embedding setup flow with multi-step wizard. Add EmbeddingSetup component with welcome, data connection, processing, and final steps. Create setupEmbeddingSettings action for configuring embedding and JWT. Add CodeSnippet component for displaying code examples. Set up proper routing for the embedding setup flow.
* Update embedding setup flow to actually create the database and handle errors. Update DataConnectionStep to display error messages.
* Fix linter errors in EmbeddingSetup component and setupEmbeddingSettings action
* Setup embedding flow: Remove SchemaSelectionStep, fix imports and types
* Fix linter errors and finalize embedding setup flow with navigation and original content restored
* Add EmbeddingSetupWrapper to provide context for embedding setup flow
* Fix table fetching in TableSelectionStep to use metadata endpoint
* Implement model and dashboard creation in ProcessingStep using /api/card endpoint
* Fix useEffect and useCallback dependencies and import order in TableSelectionStep
* working flow
* small tweaks
* sidebar with steps
* update snippet to use iframe embed
* better "Need assistance" positioning
* fix and refactor database and tables steps
* style final step
* bottom part of /final
* done step and idk i'm tired
* remove chevron and add syntax highlight as per feedback on the loom
* fix user not being loaded
* welcome step and final step
* remove dead code
* add query builder
* more stuff
* add comment about keepMounted
* set the proper settings during setup, fixes EMB-462 and EMB-461
* hide DatabaseStatus, fixes EMB-458
* "do later" -> link to /, closes EMB-456
* attempt at setting a max width, maybe closes EMB-454
* fix icons
* fix scrollbar on tall pages
* to refactor: wip link between setup and onboarding
* fix jumpy layout while moving across pages
* fix DatabaseStatus showing up after landing to the homepage
* Revert "to refactor: wip link between setup and onboarding"
This reverts commit b4c19da37d.
* wip user step
* revert changes to database status, we don't need those changes now that we're not in the routes that use the App component
* prevent going to setup/embedding if setup is already done
* table search
* restore original position of metabot to keep diff cleaner
* category + icon on search input
* restore routes structures
* add widht and height, fixes EMB-480
* remove "Need assistance" link, closes EMB-479
* change content in DoneStep, closes EMB-478
* removed /embed from the url
* empty set for search + layout adjustements, closes EMB-481
* removing things i commited by mistake
* locale selector, closes EMB-466
* cleanup unused code
* fix loading not being centered in table selection loading
* fix processingStatus i18n issue
* Remove undefined CSS custom property
* Revert "fix loading not being centered in table selection loading"
This reverts commit 8fda19338a.
* re-do the centering
* close EMB-473, refactor to be only one page
* move CodeSnippet in the file where it's used, it's not a generic
component for now
* Add a basic embedding onboarding E2E test (#59323)
* Add a basic E2E test
* Add missing import
* Finish assertions
* Wait for DB sync
* Hide DB sync status, so Cypress could click a button
* Fix test on CI
* Fix E2E after upstream change
* Some adjustment to make CI passes
* Wait for loader to disappear to avoid failing CI
* Simulate being on cloud
* Addresses review feedback
* fix sidebar steps, titles and visibility
* fix another wrong string
* Update frontend/src/metabase/setup/components/EmbeddingSetup/EmbeddingSetupSidebar.tsx
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
* address pr feedbback
* fix error ui in table selection
* add useForceLocaleRefresh to table step
* update label on test too
* more label updates
* Properly refetch database API
* Add DB sync retries assertion
* fix the retry of the database sync
---------
Co-authored-by: Kyle Doherty <5248953+kdoh@users.noreply.github.com>
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
* add regression tests
* Add issue references
* make double comment test driver agnostic
* make tests more agnostic
* format
* make another test agnostic
* add prometheus metrics
* add driver query metrics test
* test against failed count
* move clickhouse native tests back, remove parallel from metrics query test
* fix kondo
* add todo attribution
* disable 0.8.4 broken tests, re-enable 0.8.6 broken tests
* Manually close popover on escape
* Add repro for metabase#55673
* Revert "Manually close popover on escape"
This reverts commit cce85f0882.
* Trap focus in click actions popover
* Remove unneeded closeOnEscape
* Add missing :ident to :model/products-and-reviews mock card
* Add tests for implicitly-joinable visible-columns
* Add more context and cross-reference the comment about implicit-self-join-test
* Put keyword first when looking up entries in lib.tu/mock-cards
* process-query supports temporal-unit template tags in native queries (#57295)
The query processor understands temporal-unit template tags and can parse and compile
`{{mb.time_grouping('param', 'table.column')}}` appropriately. This does not include lib or frontend support and this
feature is not yet usable outside of manually making a query and passing it to qp/process-query.
* Update metabase.lib.native to understand mb.time_grouping parameters (#57506)
This adds lib support for time_grouping parameters. To do that, it pulls out the parsing logic from the driver code and pulls it into lib, where both the driver and lib can use it. The frontend still doesn't support these parameters, so while you can technically type in and run a query with a time_grouping parameter, the frontend behaves oddly if you try.
* implement frontend for time grouping in native queries (#57849)
* Update metabase.lib.native to understand mb.time_grouping parameters
* move parse-param tests
* keep picky behavior of old tagfinding
* fix ns alias
* fix ns declaration for cljs
* add lib tests for finding function tags
* remove resurrected file
* fix rebased code
* fix linting
* update doc string
* fix modules
* implement frontend for time grouping in native queries
* fix modules
* fix validation bug
* update sidebar
* fix typecheck
* fix styles
* use correct icon
---------
Co-authored-by: William Zimrin <william@metabase.com>
* implement dashboard mapping to time grouping parameters (#57931)
* Update metabase.lib.native to understand mb.time_grouping parameters
* move parse-param tests
* keep picky behavior of old tagfinding
* fix ns alias
* fix ns declaration for cljs
* add lib tests for finding function tags
* remove resurrected file
* fix rebased code
* fix linting
* update doc string
* fix modules
* implement frontend for time grouping in native queries
* fix modules
* fix validation bug
* update sidebar
* fix typecheck
* fix styles
* implement dashboard mapping to time grouping parameters
* filter columns properly
* fixup
* fixup
* temporal-unit tags use variable targets
* fix backend tests
* use variable
* cleanup
* add handling for required params
* update copy and fix required toggle usage
---------
Co-authored-by: William Zimrin <william@metabase.com>
* tests for native query time grouping (#58091)
* Update metabase.lib.native to understand mb.time_grouping parameters
* move parse-param tests
* keep picky behavior of old tagfinding
* fix ns alias
* fix ns declaration for cljs
* add lib tests for finding function tags
* remove resurrected file
* fix rebased code
* fix linting
* update doc string
* fix modules
* implement frontend for time grouping in native queries
* fix modules
* fix validation bug
* update sidebar
* fix typecheck
* fix styles
* implement dashboard mapping to time grouping parameters
* filter columns properly
* fixup
* fixup
* temporal-unit tags use variable targets
* fix backend tests
* use variable
* cleanup
* add handling for required params
* update copy and fix required toggle usage
* reset default value if time grouping option is excluded from the list of available options
* add tests
* drop not planned test
---------
Co-authored-by: William Zimrin <william@metabase.com>
* add tests for mapping of native query to temporal unit parameter (#58161)
* rework tag editor sidebar and related files to typescript (#58283)
* revert default required logic (#58568)
* revert default required logic
* fix test
* add native query validation of time grouping syntax (#58426)
* add basic fe validation for native queries
* fixup
* add cljs function for validating native queries
* make validate function take a full query and work in cljs
* add backend/cljc tests for validate-native-query
* improved error messages for validate-native-query tests
* use a new dianostics method from lib
* fix clj linting
* update sidebar styling
* fix initial state
* adjust error styling
* fix tests and drop not valid anymore code
* fix linting
* favor first template tag found and update tags when type changes
* validate that temporal unit function parameters aren't empty
* add e2e tests
* convert day/week/month/quarter/year groupings to dates
* fix empty param
* only convert days to dates
* finally actually make date conversion work correctly?
* address review
* adjust tests to the latest changes
---------
Co-authored-by: William Zimrin <william@metabase.com>
* rename test
* update native query time grouping tests to be more comprehensive (#58814)
* Fix time grouping tests (#58878)
* validate time unit parameters and fix bug (#58993)
* Fix and test nil values for native time groupings (#59062)
* add e2e tests for optional usage of time grouping (#59045)
* add e2e tests for optional usage of time grouping
* cleanup
* fixup
* update test
* fix class reference
---------
Co-authored-by: William <william@metabase.com>
* fix: improve effective children performance
on the /items endpoint by reusing the permission CTE
Co-Authored-by: John Swanson <john.swanson@metabase.com>
* fix: remove n+1 hydration call for card children
* fix: remove case/whens in sort statements
* fix: scope search results for modal to collections
Co-Authored-By: Nathan Voxland <nathan@metabase.com>
* fix: function to convert to collection items
* fixup! PR suggestion
Co-Authored-By: Ryan Laurie <ryan@metabase.com>
* fixup! add row-lock fixture for mariadb flake
* add debug for failing test
* fixup! make sure api/bit->boolean is called first
---------
Co-authored-by: John Swanson <john.swanson@metabase.com>
Co-authored-by: Nathan Voxland <nathan@metabase.com>
Co-authored-by: Ryan Laurie <ryan@metabase.com>
* Support type deduction for `case` and `coalesce`
* Revert accidental changes
* Fix CLJS tests
* More misc QP/Lib cleanup
* Test fixes 🔧
* Test fixes 🔧
* Add `:type/HasDate` and `:type/HasTime` to the type hierarchy
* Additional fix 🔧
* Improved type calculation logic
* Fix QUE-1358
* Test fixes 🔧
* Revert "Address review comments from #58408 (#58785)"
This reverts commit ed6e5591e3.
* Revert "Introduce the option to add data from the sidebar via "Add data" modal (#58408)"
This reverts commit de780f53cd.
* Reflect changes from #58405
Fixes#59273.
Fixes#48306.
Swapping two clauses can change their names, eg. two sum aggregations
`sum` and `sum_2`. Since refs in later stages are based on those names,
the refs need updating to track the same column, rather than change
targets.
`lib.remove-replace` already has logic for this when replacing a clause,
it was readily reused here. I added tests for swapping aggregations and
multiple breakouts of the same column.
Note that viz settings (also based on the names) are not updated as part
of this PR. There are separate bugs open for that issue both when
removing a clause and reordering them.
* a bit lazier table->unfold-json-fields
* remove need for dynamic var
* more optimised
* don't leak json parsers
* code style
* better perf
* short circuit earlier in case of a lot of nested fields
* add to changelog
* rename
* Add icon color support to the banner componet and story
* Add token missing banner rules
* Add token missing banner rules
* Add useLicenseTokenMissingBanner tests
* Dismiss license banner in e2e tests by default
* Improve flag naming in LicenseTokenMissingBanner
* Add banner story - non-closable
* Use regular double quotes for simple string
* Remove duplicated CSS property
* Improve docstring for license token missing banner setting
* Fix wrong property name in the test
* Remove empty align property
* Use existing setupUpdateSettingEndpoint mock
* Extract constants out of the function
* Use ready mock helpers in tests
* Refactor mock setup function to conform to existing standards
* Share the dismissal date between all admins
* Use admin settings APIs to interact with dissmisal state
* Improve banner dismissal test
* Use regular settings API to access license token banner dismissal fetch
* fix: set-table/db-permissions! in single txn
Update set-table-permissions! and set-database-permissions! to build
lists of all necessary changes based on the requested permissions
updates and then execute those changes in a single transaction to avoid
possible deadlocks in the recursive calls.
* fixup! incorrect doc string
We can have tables in migrated instances that have two copies of the
audit db tables one with a 'public' schema and one with a 'PUBLIC'
schema. This handles that case.
* FE wip
* more FE progress
* last big pass at UI
* url page param sync, show model name, move new code to new file
* remove pagination in url and add link to new metabot convo
* unit testing
* finish tests
* move prompt result fetching outside of metabot agent hook and into chat sidebar
* fix constant reference
* fix
* Add metabot prompts and wire up AI service
* Return prompt suggestions for cards visible by the user
* pr feedback
* Test metabot-scope
* Add BE tests
* Fix tests and kondo issues
* Fix tests and kondo issues
* Fix tests more
* Fix serialization
* Fix serdes more
* Use MySQL compatible delete syntax
* have FE use new regenerate endpoint instead of delete
* change mocked status code
* fix flaking unit test and fix failing MetabotAdminPage spec from wrong mocked pagination value
* Add prompt regeneration endpoint
* Document prompt regeneration endpoint
* fix test flake
* doh... fix the right test this time
* Use the collection configured int the app-db in answer-sources
---------
Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
In postgres, json fields are hidden by default, and we just show their children instead. However, mongo fields and
bigquery struct fields work differently -- we default to just showing the parent, even though the ui claims that all
fields are selected. This makes mongo and bigquery work like postgres.
In addition, this fixes a presumably-longstanding bug where mongo had incorrect column names when selecting both a
parent its child. Basically, you can't ask mongo for both a parent and its child. The returned data is just json, so
asking for the parent field includes all of its children. Instead, mongo just errors when you try to make a request
like that. As a workaround, the mongo driver was just requesting and returning the child fields. This meant that it
was returning a different number of fields than expected, which confused annotate.
Now, the mongo query processor only selects for parent fields, because as mentioned, parent fields include their
children. However, it also keeps track of all the fields we asked for in :projections, so when we get data back, we
know to pull all of those fields out of the returned data.
* fix: check for row existence in parameter upsert
Do an exists check instead of relying on the result of `update!` being
zero. `update!` can return zero either when a row does not exist or when
there are no applicable changes in the request.
* fixup! use medley/mapply instead
* test logs as artifact
* better test logs
* debugging improvements
* fix `with-context` query to work with non-literals
```
(with-context {:foo "bar"}
...)
```
worked,
```
(with-context (merge {:foo "bar"} {:bin "baz"})
...)
```
did not, now it does!
* add compiled query args to context
* kondo
* compact logs
* use an `:after` method
* use defonce to avoid repeated `test-var` overwrite
This reverts commit 9dcbcba3f6.
snowflake is now fixed from being flaky and is now required again
the fix was in checking old dataset names to prune. Shared databases
like cloud databases don't get destroyed when docker terminates, so we
have to remove old databases. The way we did it in the past would error
if more than 10,000 rows were returned. The fix is the following from
https://github.com/metabase/metabase/pull/58818 :
```clojure
(defn- old-dataset-names
"Return a collection of all dataset names that are old -- prefixed with a date two days ago or older?"
[]
;; modified the query from the snowflake driver:
;; fa58e34968/src/main/java/net/snowflake/client/jdbc/SnowflakeDatabaseMetaData.java (L1644C21-L1644C90)
;; We run into issues where this returns more than 10,000 items and we get an error: "The result set size exceeded
;; the max number of rows(10000) supported for SHOW statements. Use LIMIT option to limit result set"
(let [query "show /* JDBC:DatabaseMetaData.getCatalogs() with limit */ databases in account limit 10000"]
(into []
(comp (map :name)
(filter sql.tu.unique-prefix/old-dataset-name?))
(jdbc/reducible-query (no-db-connection-spec) [query] {:raw?
true}))))
```
Some mysql -> postgresql migrated users still had adjust to source
failing because they had two tables with downcased names but one with a
"public" schema column and the other with a null schema column. This
handles that case by only selecting tables if there is not already a
table with a "public" schema column.
* VIZ-192 Updates goal tooltip to use same formatting as y-axis (but ignores compact/auto formatting to ensure the goal value is represented accurately)
* VIZ-192 Adds support for formatting percentage-based goals (e.g. bar charts with "Stack - 100%" selected)
* VIZ-192 Updates getGoalLineHoverData to accept a formatGoal param rather than a chartModel per PR feedback
* VIZ-192 Adds e2e tests for goal value formatting
* VIZ-181 Adds boundaryGap to bar chart y-axis if it has negative values to ensure bar labels don’t overlap axis labels
* VIZ-181 Minor performance consideration; `ensureRoomForLabels` only checks `dataSeriesOptions` since "bar" series won't show up in other seriesOptions
* VIZ-181 Tweaks ensureRoomForLabels calculation
* VIZ-181 Adds unit tests for ensureRoomForLabels
* Don't open the database picker when there is only one database
* Allow null for database
* Add repro for metabase#57644
* Remove duplicate it
* Use == to check for undefined
* Fix test description
* Update e2e/test/scenarios/native/native-reproductions.cy.spec.ts
Wording
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
* Add check for correct clauses for expression mode
* Add support helper to expressions/mode
* Do not show help text for unsupported functions
* Add repro for metabase#58230
* Add e2e test for not showing helptext for unsopported functions
* Allow value operator
* Pass expressionMode where needed
* Tranlate mode name in error message
* Avoid throwing in checkExpressionModeSupportsClause
* Add repro for metabase#57388
* Fix update button helper
* Set to default when value is empty
* Update repro
* Make unit test more robust
* Do not pass default value to default value picker
* Fix unit test
* fix info formatting
* ensure exception is not swallowed
* Ensure we use a different connection per [[have-select-privilege?]] call.
This is to guard against databases (like Oracle) closing a connection when attempting
to execute a priviledged select, causing subsequent calls to fail.
* adjust usage of snowflake driver
* adjust usage of postgres driver
* update tests
* more efficient: move filtering within db-tables
* add test
* add changes to driver changelog
* route through driver rather than jdbc, so athena doesn't fail
* ensure we're testing only the drivers using default jdbc impl
* expose wrapper, rename
* PRG-53 add community translations notice
Enhance localization features by adding community translation links and descriptions across user profile, localization settings, and setup components.
* PRG-53 Refactor localization components to use CommunityLocalizationNotice
Replaced direct translation links and descriptions in UserProfileForm, LocalizationSettingsPage, and LanguageStep with the new CommunityLocalizationNotice component for improved code reuse and consistency.
Signed-off-by: Jakub Chodorowicz <jakub@chodorowicz.com>
* PRG-53 Use external link in the notice and add tests
* PRG-53 Fix e2e i18n test
* PRG-53 Prefer stack over brs, add a11y label, refactor export
* PRG-53 Improve cy selector to a semantic one
* PRG-53 Use hardcoded Metabase name in the setup flow
* PRG-53 use color name in color property
* PRG-53 use show-metabase-link setting
* PRG-53 Use Metabase original name for admin screens
* PRG-53 Add storybook stories
* PRG-53 Don't mention custom name in the translation when white labelling
* PRG-53 use static for crowdin link
* PRG-53 remove CommunityLocalizationNotice story
* PRG-53 Fix e2e i18n test
---------
Signed-off-by: Jakub Chodorowicz <jakub@chodorowicz.com>
* fix: lookup cloud migration part keys
Mapping over multipart-urls map entries wasn't ordered or deterministic, but it happened to be for less than 8 elements.
Changed to a lookup on advice from @dpsutton.
Fix https://metaboat.slack.com/archives/C010ZSXQY87/p1748611922362219
* test: update cloud migration settings test vars
* fix: add early multipart errors
* Update Static and Interactive Embedding Settings
* update sdk settings
* remove useMergeSetting
* remove more dead code
* remove more unnecessary stuff
* update unit tests
* more test updates
* update e2e tests
* Move embedding unit tests to local components
* address review comments
* Fix a flaky test for max-refingerprint-field-count
The code here goes through tables and refingerprints them (with all
their fields). After each table it checks the
`max-refingerprint-field-count` and stops if we've hit it.
The test gave some wiggle-room - we'd allow 10 extra fields. But in a
fresh run of my tests, the biggest table has... 13 fields. So if the
last table we hit before hitting the limit was *that* table, we exceed
our wiggle-room and the test fails.
Instead, the test now actually looks to see what's the biggest table we
have (in terms of number of fields), and asserts that the number of
fields refingerprinted is, at the most, the max plus that number of
fields.
* fix two more flaky tests
one is clearly a symptom of another test being super naughty but I can't
figure out which one. It's marked `parallel` and doing
```
(mt/with-temp [:model/Card {id :id} ...]
(do-something-with (t2/select-one :model/Card id)))
```
which is failing because `(t2/select-one :model/Card id)` is returning
nil. We can just pass the card that was actually returned by
`mt/with-temp` here and that should be more resilient to horrible tests
being horrible.
the other is checking that we're caching something by checking the call
count to toucan on the first and subsequent call to a function. But it
asserts that the first call count is exactly 6, which isn't relevant.
If I start a fresh REPL I get more than 6 the first time. It doesn't
matter! Just assert that we don't get MORE than the first time on the
second run!
* fix flaky tests freal
* fix: use t2/query to skip card callbacks
* fix: retry on failed pk insert
* fix: log when we have the cluster lock
* fix: try catching all sqlexceptions
* fix: add a fixture to pre-create the cluster_lock
* fixup! remove with-connection from update-used-cards
---------
Co-authored-by: Edward Paget <ed.paget@gmail.com>
* Add testing context around before-and-after gen tests
To ensure you can see the before and after queries as well as the steps that produced them when a test fails.
* Fix before-and-after :join in generative tests
Pass stage-number to check for aggregations and breakouts on the stage where the join was added rather than the final
stage.
* Add an option to force multi-staged data picker
* Move type to a proper location
* Add `question` to `entity_types`
* Add ability to select saved questions back to multi-staged data picker
* Auto select Questions or Models when there is only a single option
* Prevent accidental types
* Remove unreachable code
* Default the join step after selecting a question to the question step
* Fix type errors
* Improve typing + fix unit tests
* Remove unnecessary await
* Add unit tests
* Update the default simple data picker value
* Fix the picker name typo
* Ignore `question` in Simple data picker
* Add E2E tests
* Move a constant out of a type file
* Fix types
* Address review. Make code more sane
* Address review. Improve variable name clarity.
---------
Co-authored-by: Oisin Coveney <oisin@metabase.com>
* add tests for SEM-3
* let fingerprinters respect ->Number coercers
* explicitely assert for supported coercions
* add test on fingerprinted supported coercions
This was failing because we call
```
(session/create-session! :sso user (request/device-info request))
```
with the result of this function, and `session/create-session!` requires
a user with at least `:id` and `:last_login`. We didn't have a
`:last_login` in this case so `create-session!` was barfing.
we didn't have any tests that actually logged in as an existing user.
* update sync error handling to take into account `do-not-retry-exceptions?` as per its docstring
* add test
* introduce `with-returning-throwable`, use consistently
* update test
* add remember me to google sign in
* UI adjustments
* assert that remember me checkbox is rendered with google button
* backend test that cooke expiration is set
* rollback model changes in BE test
* create user model and use with-model-cleanup
---------
Co-authored-by: Edward Paget <ed.paget@gmail.com>
* Define the number of engines in a constant
* Improve callback naming
* Use t-shirt sizing
* Remove superfluous e2e test
We're already covering this scenario using Jest.
* Update prop naming
* Simplify CSS
* Change tab as well when url changes
* Do not get confused about editor height
* Add repro for metabase#55486
* Scope loading query
* Test forward button too
* Limit query
* Remove loading check altogether
* Wait for queries to complete after saving changes
* Wait for `dc.series` queries in `visitDashboard`
* Wait until visualizer loads after it's open
* Fix flaky tests
* Remove flaky tag
* Revert "Wait for `dc.series` queries in `visitDashboard`"
This reverts commit 3f6a606442.
Error we were getting:
```
1. Unhandled net.snowflake.client.jdbc.SnowflakeSQLException
The result set size exceeded the max number of rows(10000)
supported for SHOW statements. Use LIMIT option to limit result set
to a smaller number.
SnowflakeUtil.java: 170 net.snowflake.client.jdbc.SnowflakeUtil/checkErrorAndThrowExceptionSub
SnowflakeUtil.java: 102 net.snowflake.client.jdbc.SnowflakeUtil/checkErrorAndThrowException
StmtUtil.java: 488 net.snowflake.client.core.StmtUtil/pollForOutput
StmtUtil.java: 394 net.snowflake.client.core.StmtUtil/execute
SFStatement.java: 502 net.snowflake.client.core.SFStatement/executeHelper
SFStatement.java: 211 net.snowflake.client.core.SFStatement/executeQueryInternal
SFStatement.java: 145 net.snowflake.client.core.SFStatement/executeQuery
SFStatement.java: 779 net.snowflake.client.core.SFStatement/execute
SFStatement.java: 697 net.snowflake.client.core.SFStatement/execute
SnowflakeStatementV1.java: 293 net.snowflake.client.jdbc.SnowflakeStatementV1/executeQueryInternal
SnowflakeStatementV1.java: 149 net.snowflake.client.jdbc.SnowflakeStatementV1/executeQuery
SnowflakeDatabaseMetaData.java: 1648 net.snowflake.client.jdbc.SnowflakeDatabaseMetaData/getCatalogs
REPL: 107 metabase.test.data.snowflake/old-dataset-names/fn
```
We do this in `old-dataset-names` by just calling `(.getCatalogs
metadata)` which runs
fa58e34968/src/main/java/net/snowflake/client/jdbc/SnowflakeDatabaseMetaData.java (L1644C21-L1644C90)
or
```sql
String showDB = "show /* JDBC:DatabaseMetaData.getCatalogs() */ databases in account";
```
I've modified that to have a limit and then run that
`jdbc/reducible-query` to get the names
* Fix zoom drill for clicks on a joined PK column
* Add lib.drill-thru.common.primary-key? and foreign-key? helpers
* Fix zoom and quick-filter drill for clicks on a joined PK column
* Remove unused imports
* Move source fields check into lib.drill-thru.common and revert changes in lib.metadata.calculation
* Remove trailing whitespace from docstring
* Lookup primary key in visible-columns ignoring joins rather than source-table fields
* Fix docstring
* Fixing mapped user facing strings for relative date params in subscriptions and alerts
* Adding frontend fix + spec
* Changing 'is' to '->' in UI
* pr feedback
* e2e test fix
* use badges in oss sidebar; update pulse card rendering; test fixes
* test fix
* test fix
* pr feedback
Currently, if a user is set to `is_active: false`, we still allow them
to log in via JWT or SAML. When they do, we also don't update the value
of `is_active`, which could potentially lead to inaccurate user counts.
After this change, the behavior when discovering an existing user upon
login is:
- if `is_active` is `false` and JWT/SAML user provisioning is on, we'll
log the user in and set `is_active` to `true`.
- if `is_active` is `false` and JWT/SAML user provisioning is off, we'll
give the user an error and not change the existing user.
- if `is_active` is `true`, we'll log the user in like normal.
* Remove binning from pinned items
* Add reproduction for metabase#57697
* Revert "Remove binning from pinned items"
This reverts commit aa2d4abbb4472b835dee901ce7ac36c4bc43cd5e.
* Remove binning from column when calculating displayname
* Add models; liquibase migration; ...
and other model incantations
* Add fk constraint after indexes
* Update model tests for column names
* serdes fixes
* Replace remaining missing metabot_model_entity_id
* Update generated baselines
* fix serialization tests
* initial implementation
* make the api match
* wip
* align types with API
* improved routing
* empty state
* cleanup and tests
* pivot to collection picking
* no personal collection
* update tests
* remove defunct table changes
* fix conflicts
* add copy for embedded metabot
* linter appeasement program
* linter appeasement program
* linter appeasement program
* update api
* no thank you migration
* un-un-un revert some stuff
* address review comments
---------
Co-authored-by: Edward Paget <ed.paget@gmail.com>
* Add lib.util/find-clause-by-uuid
* Lookup clause by uuid to generate the :long display-name for a :metadata/column
* Fix display-name expectations in targets.unit.spec.ts
* Fix display-name expectations in click-behavior.cy.spec.js
* Fix display-name expectations in filter-sources.cy.spec.js
* Review feedback: ensure last-stage? throw when given an invalid stage-number
* Review feedback: use lib.tu/venues-query
* Review feedback: explict true? and false? checks for first-stage? and last-stage?
* WIP
* Adjust process-multiple-queries to also support single pivot queries
* cleanup
* Seemingly working backend support for only running necessary subqueries
* pivot unit test adjustments
* Test fixes
* Rerun pivot query when settings change
* wip fix for pivots as email attachments in subscriptions
* alternate single query qp support; unit test fix
* fix ts
* fix
* fix frontend spec
* pr feedback
* adding api test coverage for pivots with totals disabled
* fix cljkondo
* typo
---------
Co-authored-by: Noah Moss <noahbmoss@gmail.com>
* keep backend pivot exports uncollapsed
* fix kondo errors
* update tests - only run collapsing tests on cljs, add a new test for clj that rows are not collapsed
* fix more kondo warnings
* cleanup
* feat: api and models for managing metabot entities
* Add stubs
* Add models; liquibase migration; ...
and other model incantations
* tests for api
* Update h2 copy
* rename model to dataset
* Add fk constraint after indexes
* Wrap tests with with premium feature
* Add seed migration; drop unused index
* Update API to wrap in items instead of data
* Update model tests for column names
* Pass remaining serdes tests
* Reorder migrations
* serdes fixes
* correct api to remove metabot_model_entity_id
Handle root collection
* fix mistake in merge
* Replace remaining missing metabot_model_entity_id
* Update generated baselines
* fix rollback sql syntax
* update api to support collections
* update serdes for collections in metabot entities
* fix precondition for loading metabots
* fix cleanup metabot table before list endpoint test
* fix whitespace
* fix serialization tests
* fixup! change migration version to 56
* fixup! remove remaining no-metabot tags
* fixup! super nit
* fixup! move api into new namespace
make /metabot API routes singular
* fixup! better combine routes
* cljs: Make currency definitions more compact
Useful for reducing CLJS bundle size.
* cljs: Use unquoted functions in metabase.lib.drill-thru
* cljs: Make var re-exporting leaner in CLJS
* prevent Metabot from making a request for suggested prompts if no user is logged in to prevent auth redirect
* this fix is better
* add code comment
* reference PR in code comment
* revert unneeded change
* Fix sharing e2e test
* Simplify `shouldSplitVisualizerSeries` check
* Handle empty/erroring datasets
* Use card names for series names
* Port e2e tests
* Don't use entity IDs
* Unskip test
* Include metrics and models in data importer search
* Return result_metadata for metrics and datasets
* Fix drillthrough test
* Update comment
* Bring back removed metric tests
* Remove reundant test
* include result_metadata in recents api request
* Fix e2e test
* Fix typo
Co-authored-by: Sébastien <sebastien@metabase.com>
* Fix e2e test
* fix be test
* Fix e2e tests
* Update src/metabase/activity_feed/models/recent_views.clj
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
---------
Co-authored-by: Tyler Plude <tsplude@gmail.com>
Co-authored-by: Sébastien <sebastien@metabase.com>
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
* Mega App DB memory usage improvements
* Add a test
* Minor comment formatting
* Fix test name
* This test can be ^:parallel
* Actually no it can not
* Fix test name
* Don't create mega queries when deleting databases (#58491)
* Improved fix
* Don't require new migrations to have preconditions (this is bad)
* Remove test
* Revert migrations
* Manually set Field.parent_id = NULL for all Fields in a Database when deleting a Database
* Tweak query for MySQL
* Yet another fix 🔧
* `IS NULL` => `IS NOT NULL`
* Give up on trying to find a nice fix
* MySQL fix
* MySQL fix (for real)
* Fix SDK cross version tests getting version number from other prerelease labels
* Update code from #58638
* Remove unnecessary console.log
* Simplify code even moarrrrrrr
* fix: set download-results to no on table block
When a view-data permission for a table is set to blocked set the
create-queries and download-results permissions to no. Also includes a
migration script read to backport to v52 to update databases to be
consistent with this change
* fixup! remove precondition
* fixup! join in update to work on mysql
* fixup! separate migrations on mysql/postgres
* fixup! test order
* Setup sdk-based embedding iframe route (#56915)
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
* restore routes.clj to fix merge conflicts
* Tests for new iframe embedding's script tag and route (#57269)
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
* remove the safe-to-remove warning on rspack css ordering
* Rename embed.v1.js to embed.js for new iframe embedding (#58415)
* Revert "remove the safe-to-remove warning on rspack css ordering"
This reverts commit 4feae48604.
* Remove redundant sdk-ee-plugins import from the SDK in new iframe embedding (#58416)
* Ignore CSS import order warnings from new iframe embedding (#58417)
* Follow-up validation improvements for new iframe embedding (#58516)
* Explicitly disallow using API keys in production for new iframe embedding (#58520)
* fix wrong merge conflict - do not destructure H.cy in component tests
---------
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
* Fix static question embed download when parameters have multiple values
* Simplify type
* Don't wanna deal with outdated query builder types 🤷
* Use a proper value when asserting
Before, nest-query relied on the preprocessor (specifically, the add-implicit-clauses middleware) to add all possible
fields to the newly created inner query (and then removes unnecessary fields later). However, add-implicit-fields
ignores fields with a parent id. The main user of parent-id is mongo, and mongo doesn't use nest-query, so this
usually isn't an issue. However, bigquery also uses parent-id, and bigquery is a sql driver that uses nest-query. As
a result, nest-query wasn't adding bigquery struct member fields to the inner query, which caused some queries to
break. Now, nest-query explicitly finds all non-sensitive/retired fields (including fields with parent ids) and
ensures that they are in the inner query.
* used `entityTypeFilter` for new embedding data pickers
* Rename `entityTypeFilter` to be consistent with `entity_types`
* Migrate `entity_types` to a new reducer
* Add E2E test
* remove unused prop
* Fix interactive embedding's `entity_types`
* Fix unit tests
* Avoid using quadratic search in FkTargetPicker
* Reduce further parsing and stringification
* Avoid calling JSON.parse in FkTargetPicker
* Assert fieldId
* Rename getters to be more clear
* use user locale setting if available for lang prop in <html>
* add a test
* fix my broken test
---------
Co-authored-by: John Swanson <john.swanson@metabase.com>
* use mantine menu and reorganize options
* remove comments
* fix unit tests
* e2e test fixes, replace "a" with ForwardRefLink to fix sidebar not getting closed
* fix external links
---------
Co-authored-by: Sloan Sparger <sloansparger@gmail.com>
* Add prompt to the query
* Add prompt to the query
* Add prompt to the query
* Add prompt to the query
* Add prompt to the query
* Add prompt to the query
* Add prompt to the query
* Tests
* Tests
* Tests
* Tests
* Tests
* fix: audit db not working after import form h2
Removes conditions from the `adjust-audit-db-to-source!` function so we
make sure we always restoring the audit db tables to their original form
regardless of what type of app-db is used.
* fixup! test setting up db triggers
* fixup! cljfmt
run breaking changes tests on multiple runners
TO BE REVERTED BEFORE MERGING
force production fe build
build-release as setting node_env fucks up everything
exclude @OSS tests
Revert "TO BE REVERTED BEFORE MERGING"
This reverts commit c907a2f492.
* Add additional check on rendering native preview panel
* adding e2e test
* adjusting e2e test
* do not show native panel when no data is selected
* move e2e test to instance analytics suite
* simplify embedding data picker code
* Show the data picker step based on starting query source
* Set starting model collection ID when joining a model
* Improve initial collection loading UX
* Fix failed unit tests and types
* Fix failed E2E tests
* remove unused var
* Fix sometimes the starting collection is incorrect
* Add an E2E test
* Add a comment to clarify
* Clarify a new prop
* VIZ-329 Updates ChartSettingInput and ChartSettingInputNumeric to apply changes when the user pauses typing in addition to on blur
* VIZ-329 Removes now-redundant blur handler in ChartSettingInputNumeric and updates unit tests
* Revert "fix serialization for visualizer entities (#57467)"
This reverts commit d56e791077.
* drop columns from test data
* fix types, tests
* Revert "[VISUALIZER] Fixing dashboard duplication for visualizer cards (#58106)"
This reverts commit 6cf7606754.
* keep preferred true?
* serdes transformation support for visualizer settings
* Update entity ids in visualizer dashcards on DB read to be card ids
* unit test for the serdes transformations
* cljkondo
* fix on-read to only run if viz settings exists
---------
Co-authored-by: Tyler Plude <tsplude@gmail.com>
Co-authored-by: Noah Moss <noahbmoss@gmail.com>
* Empty
* Add schema for datetime()
* Add datetime() function; works on iso strings
* Implement datetime() for sql to test all drivers
* Remove Z from datetime
* Change the format of the datetime string in tests
* Be more lenient on types
* have multiple formats for the test
* Implement datetime() for mongo
* Use ISO string in test
* Datetime for string with no mode
* Add changelog entry for :expressions/datetime
* Add docs for datetime
* Add e2e tests for datetime
* Update e2e test and datetime text
* Fix :expressions/datetime feature
* Remove reference to iso
* Remove unused schema
* Fix frontend test
* Use multiple arities for datetime()
* Replace T with ' ' in databases that don't like T in datetime timestamps
* Try removing visibility requirement in test
* Fix brittle test
* Test dates with space and with T
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* fix: explicitly mark when fields are gtapped
* add debug
* fixup! tests setup to set advanced feature
* fixup! strip any user-added gtapped-tables keys
* fix a bad import
* Refactor `browse` navigation section
- Removes the dependency on the `CollapseSection` custom component
- Prepares the section for the "Add Data" project
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
* added an ... submenu to open questions
* fix
* menu is now in the title
* addressed feedback
* reverted submenu change
* added title menu items to funnel
* added e2e test
* added chevron
* unit test fix
* remove auto-close logic
* add metabot icon to searchbar, clicking icon opens metabot instead of search
* make chat ui appear in the sidebar
* add header section to the chat sidebar
* progress on conversation ui
* few tiny additions
* fetch mock suggested prompts from an endpoint, animate thinking text, fix search button touch target size, do no clear chat history when closing the chat sidebar
* messages rendered as markdown
* restyles
* more restyles
* fix input autofocus
* impl empty state, remove more textarea code
* hide copy button actions
* handle user aborted requests better
* design iteration
* latest design feedback, better auto-scrolling, better markdown rendering
* fix types
* increase unit test coverage
* impl long convo calc, add unit tests, fix focus issue if clicking the metabot option from the command palette
* move code to enterprise folder, fix some e2e, adjust header alignment, fix some types
* small clean ups, fix failing tests and erroring types
* add unit test and fix selector for getting latest agent messages by type
* review feedback, turn on an e2e test again
* try getting metabot e2e working
* fix embedding sdk
* impl pr feedback
* Make default toast color darker
* Avoid remounting the UndoList on overy toast change
* Tweak the undo animation to come in from the left
* Move more undo state into UndoListingOverlay
* Reverse toast order
* Manually manage undo target
* Remove unused props
* Store pause state in undo itself
* Use react-transition-group to render toast notifications
* Measure height so we can animate toast position
* Use css transforms only and avoid animating bottom
* Mock react-transition-group in test
* Unmount elements on exit
* Wait for animation in test
* Make toast ref optional
* Clean up transition
* Fix e2e test
* Disable transition group in cypress
* Add check_filled icon
* Default to check_filled
* Add text-secondary-inverse
* Use text-secondary-inverse color for icon on tooltip
* Remove min-width from toast
* Control the animation state of the todo's after moving the portal
* Fix icon in unit tests
* Simplify undo hooks
* Avoid overwriting state
* Add missing import
* Allow transitioning new todos even when not moving the portal
* Fix e2e test
* Update Loki Snapshots
---------
Co-authored-by: Metabase Automation <github-automation@metabase.com>
* fix typo
* don't error out during fields-metadata fallback if table is known to not exist
* table known to not exist impl for drivers
* add test
* add debug log
* add to changelog
* address review comments
This commit adds the conditional branding to dashboard email subscriptions and to question alerts. It does so by altering the handlebars templates we use for each, respectively. It follows the same logic as the rest of the PRs from this project. If a token has a whitelabel feature flag (Pro/Enterprise), the branding is not shown. It should be shown for OSS and for Starter plans.
* Add branding content to dashboard subscriptions
* Add branding content to alerts
* docstring typo fixes
* [SEM-8] Exclude all numeric values from Category semantic type consideration
* add unit test for SEM-8
* more typo fixes
* adjust existing tests for new sync behavior
* extend category classifier restriction to any non-text(-like)
* unit test for bolean classification
* further adjust existing tests for new sync behavior
* missed one test
* Fix e2e test by filtering
* fix e2e test by setting field semantic-type before hand
* don't classify int/bool values to category by name either
* rename tests
* extend tests
* style
* remove unused var
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* Fix the sorting of custom column from a saved card in a new question
* Remove the expression_name that is not actually used.
* Use col.name instead of expression_name in sanatizeResultData
* Remove additional :expression_name references in tests
* Remove comment that was attached to now-removed :expression_name
* Remove expression_name from static-viz components
* Remove expression_name from instance_analytics export
* Add comment to now-deprecated expression_name field in DatasetColumn
* Add e2e test for sorting on nested custom column
---------
Co-authored-by: Lifeng Lv <lvlifen9@gmail.com>
* unlimit pivot exports
* fixups, fix default for collapsed rows setting
* address import issue
* simple unit test
* simplify test a bit
---------
Co-authored-by: Tyler Plude <tsplude@gmail.com>
Running `yarn dev-ee` was broken on the latest master. (introduced in #58054)
The compiler was complaining about the `\` in the docstring because it was interpreting it as an escape character followed by a newline.
We're greatly simplifying and speeding up a Metabase setup
when the use case is "embedding". This currently applies only to
hosted instances. The FE in the main app will expect the query param
`use_case=embedding` to exist. If it does, we're showing the simplified
setup flow.
* Empty
* kick ci
* Allow temporal type in addition to string for `date()`
* Add date(datetime) test
* Use cast for date for postgres
* Extend date() on mysql
* Extend date() on bigquery
* Extend date() at snowflake
* Extend date() to datetime on clickhouse
* Generalize `date()` to :sql
* Update changelog with `date(datetime)`
* Empty
* DateTime->Date Coercion + test
* Slight cleanup
* Whitespace
* Cleaner implementation and test
* Test timestamp as well as timestamptz
* Correct implementation to get subtypes of DateTime
* Update helper text string for date
* Add e2e tests for date
* Also check to correct coercion of dates
* Add customization points to enable clickhouse implementation.
* Remove changelog-test/ignore true from ->date
* Fix defn ordering
* Fix expected type for datetime coercions
* Fix tests for sqlite
* Implement coercion for Mongo
* Implement specialization for oracle
* Add :expressions/date feature to all sql dbs
* Add :expressions/date feature to mongo
* Mongo: add text() and date()
* Better check
* Better check
* kick ci
* Add text() to all sql dbs
* Empty
* kick ci
* kick ci
* Format code
* Format code
* Add :text implementation to sql driver
* More robust tests across drivers
* Correct changelog text
* Ors on one line
* Or on same line
* kick ci
* Add `text-dbtype` multi-method
* Add athena implementation of text-dbtype
* Add databricks implementation of text-dbtype
* Remove date expression in tests that breaks some sql dbs
* Improve cast test for dates on other dbs
* Remove duplicate test
* Remove test that won't work for many dbs
* Use VARCHAR for oracle
* Use STRING for SparkSQL
* Use VARCHAR on Vertica
* Remove test that converts date to text before parsing it
* Add mongo exception
* Only run this test for SQL databases (requires native sql query)
* Add SQL Server text type
* Add Starburst text type
* Try varchar2(100)
* Simpler implementation
* Don't support date() for Oracle
* Try selecting from people to get oracle to work.
* Compile nested query for `text()` test
* Don't test empty string because Oracle treats it as NULL.
* Appease the kondo
* Implement Presto cast to text
* Implement cast-to-text in terms of cast (for presto)
* Correct test name
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
We're using the `computed.filters` value in the handlebars email template.
Previously, if `parameters` were an empty list `[]` we were returning a truthy value,
and handlebars was rendering an empty row in an email.
@ngoc figured out that we need to wrap parameters with `seq` in order to have a
a proper `nil` assigned to `:parameters`.
* Cast boolean expressions in :fields clauses to type bit on sqlserver
* Compile boolean literals :inline on sqlserver
* Add some tests for non-booleans to boolean_to_comparison_test.clj
* Add tests for boolean-expression-clause?
* Mention sql.qp/*inner-query* in boolean-expression-clause? docstring
* Split separate cases into separate tests
* Add cast in sql.qp/as if field options contain ::sql.qp/add-cast
Rather than duplicating logic for :select-top in apply-top-level-clause [:sqlserver :fields], just decorate boolean
:fields clauses with ::sql.qp/add-cast and let the parent method handle it. In this way, the :sqlserver method can
pre-process the MBQL :fields clauses rather than post-processing the raw honeysql.
* Add tests for {sum,count,distinct}-where with literal booleans
* Fix typo in literal expressions tests: filters -> filter
* Fix boolean->comparison for boolean expressions coming from nested queries
* Add sql.u/->honeysql-parent-method util
* Remove ::boolean-is-comparison abstract driver
* Lift ->honeysql call out of boolean-to-comparison
* Pass in boolean-types to boolean->comparison from driver
* Update comments and docstrings
* Require :left-join feature in nested-and-joined-literal-boolean-expressions-in-conditions-test
* Revert whitespace changes
* Implement sql.qp/apply-top-level-clause :filter in terms of parent method
* Fix typo in docstring
* Remove unused sql.helpers import
* Add comment about Oracle 23+ support to boolean_to_comparison.clj
* Rename local has-types? to has-some-types? in boolean-field-clause?
* [Backend modularization] `parameters` module (first pass)
* Make sure DB is initialized
* Oops revert the change I made to demo something during BE Guild Sync
* feat: generic data permissions visibility queries
Creates a new namespace with a generically applicable set of sql queries
for getting only models controlled by data permissions that a given user
has access to.
It also creates a new model.interface defmulti `visible-filter-clause`
that allows us to generate a filter clause for a given model to filter a
query on a supplied expression to only those models allowed for the
supplied user. There is a default implementation that is always true.
the `visible-filter-clause` method is only implemented for the Table
model so far since that is used in a search.
This also fixes a bug in the previous implementation of the sql
filtering for Table models that did not correctly handle the logic in
`data-perms/coalesce` for `:perms/view-data` where `:blocked` is ranked
ahead of `:legacy-no-self-service` for the purposes of selecting the
applicable user permission but is ranked below when testing permission levels.
Co-Authored-By: John Swanson <john.swanson@metabase.com>
* fixup! default for visible-fliter-clause to false
* fixup! add cast back for search permissions
* fixup! correct db type test
* fixup! more verbose table names in perms test
---------
Co-authored-by: John Swanson <john.swanson@metabase.com>
Closes#41265.
The schema for is-empty and not-empty was updated in #56855 to allow StringExpressionArg as well as Field. This
updates desugar-is-empty-and-not-empty to also understand non-field args.
* fix: move quartz metric listeners to analytics
To make sure the task module does not need to depend on the analytics module
* fixup! remove analytics from task uses
* fixup! export listener adder methods
* fixup! missing docstring
* fixup! put the comment back in the right spot
* Update upgrading-metabase.md
Add changes that were needed for a long time :)
* suggested edits (#57913)
---------
Co-authored-by: Jeff Bruemmer <jeff.bruemmer@gmail.com>
Remove `expectGoodSnowplowEvents` entirely - it was an antipattern.
Replace it with a good set of snowplow helper functions that actually
accomplish what we want:
- `expectSnowplowEvent`, which matches on the *entire* event rather than
assuming the event is an unstructured event (most of ours are, but some
are not).
- `expectUnstructuredSnowplowEvent`, which behaves the same as
`expectGoodSnowplowEvent` used to, except I removed an unused behavior
where it took a function instead of a partial-match object.
- `assertNoUnstructuredSnowplowEvent`, which asserts the inverse of
`expectGoodSnowplowEvent` - there are zero matching snowplow events.
I removed `Good` from all these names as I think that's implied - if you
want to make an assertion that a bad event is being received you can
write your own helper :)
* Only send id and value when downloading csv
* Add repro for metabase#51813
* Merge in template tag parameters to parameters when running cards
* Fix erroneous test
* Do not pass all parameter data for cards
* Remove commented out code
* Only pass sparse parameters on public dashboards or cards
* Remove unused import
* Fix lint
---------
Co-authored-by: Tamás Benkő <tamas@metabase.com>
* [Backend modularization] `collections` module (DEV-444)
* Fix wrong namespace
* Fix new metabot v3 code
* Some test fixes. 🔧
* Move test for EE-specific behavior to EE
* Make `/api/collection` tests work correctly from the REPL
* Try to debug failing test
* Fix sanity checc
* Fix Kondo warnings
* Test fix 🔧
* Attempt to debug test failures
* More test failure debugging
* Cleanup
* More test failure debugging
* More test debugging
* Fix private var
* Test fix? 🔧
* adding get-visualization-columns in clojure land
* remove inline defs
* add util unit tests
* update comment
* linter fixes
* Fix render visualizer utils to work with entity ids, add test
* Fix body test
* Remove unused endpoints
* Resolve implicit FK Field -> PK Field -> [Name] Field remapping
This affects the field and dashboard APIs.
* New endpoints
* Remove unused code
* Always return value, possibly without label
* Stop requiring FK entry in FK -> PK -> Name resolution
* Relax FK requirement in remapped value resolution
* Remove remaining /field/ endpoints
---------
Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
* use existing col settings helper
* forward declaration of viz-settings-for-col to prevent compilation issues
* fixing typo in parens
* fix unit tests
* Fix clj kondo warnings
* fix: wrap un-translated strings in t``
* fix more untranslated strings
* translate some aria-labels
* use interpolation instead of having to provide context
* address feedback and add context
* more t calls added
* revert changes to slider component as it's not used and may get removed
* remove file that i re-created when rebasing
* more context
* more context
* Update frontend/src/metabase/query_builder/components/MoveQuestionModal/MoveQuestionModal.tsx
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
* Update frontend/src/metabase/query_builder/components/expressions/Editor/Listbox/Listbox.tsx
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
* address feedback
* add context to what is SSL short for
* remove whitespace that could possibly create issues
* add missing import for c
---------
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
* Empty
* kick ci
* Allow temporal type in addition to string for `date()`
* Add date(datetime) test
* Use cast for date for postgres
* Extend date() on mysql
* Extend date() on bigquery
* Extend date() at snowflake
* Extend date() to datetime on clickhouse
* Generalize `date()` to :sql
* Update changelog with `date(datetime)`
* Empty
* DateTime->Date Coercion + test
* Slight cleanup
* Whitespace
* Cleaner implementation and test
* Test timestamp as well as timestamptz
* Correct implementation to get subtypes of DateTime
* Update helper text string for date
* Add e2e tests for date
* Also check to correct coercion of dates
* Add customization points to enable clickhouse implementation.
* Remove changelog-test/ignore true from ->date
* Fix defn ordering
* Fix expected type for datetime coercions
* Fix tests for sqlite
* Implement coercion for Mongo
* Implement specialization for oracle
* Better check
* kick ci
* kick ci
* Format code
* Format code
* Correct changelog text
* Ors on one line
* Or on same line
* Remove zh from the list of supported translations (#57672)
We don't support the `zh` (Traditional Chinese) locale anymore – only `zh-CN` (Simplified Chinese), and `zh-HK` (Hong Kong), and `zh-TW` (Taiwan). Here's a [Slack discussion](https://metaboat.slack.com/archives/C6UBFU9GW/p1741983889165599).
So let's remove `zh` from the list of supported translations.
For some reason the list wasn't sorted alphabetically by language name - this PR fixes that too.
* [Backend modularization] Mega Renaming PR 1 (#57561)
* auth-provider => auth-provider.core
* enterprise/auth-provider
* `metabase.events.core`
* Move `sql-parsing-enabled` Setting into `query-analysis` (DEV-449)
* `metabase.events.core` (DEV-455)
* `metabase-enterprise.stats` => `metabase-enterprise.analytics.stats` (DEV-475)
* `enterprise/stale` cleanup (DEV-474)
* `enterprise/airgap` => `enterprise/premium-features`
* Appease Kondo
* Remove unused
* Mark setup tests flaky (#57710)
* mark setup tests flaky
* add flake
---------
Co-authored-by: Sloan Sparger <sloansparger@gmail.com>
* Fix parameter types! (#57677)
* [Notification] reduce module apis (#57678)
* fix audit log to record external emails when sending notifications (#57679)
* Remove "Model" and "Action" from the "New" button menu (#57647)
* feat: add a link to field filter docs from dashboard sidebar with native question (#57687)
* feat: add a link to field filter docs from dashboard sidebar with native question
* oops
* add missing translation
* Metabot v3 PoC (#52436)
Co-authored-by: Tyler Plude <tsplude@gmail.com>
Co-authored-by: Phoomparin Mano <poom@metabase.com>
Co-authored-by: Mihael Konjević <konjevic@gmail.com>
Co-authored-by: John Swanson <john.swanson@metabase.com>
Co-authored-by: Aleksandr Lesnenko <alxnddr@gmail.com>
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
Co-authored-by: Thomas Schmidt <thomas@metabase.com>
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
Co-authored-by: github-automation-metabase <166700802+github-automation-metabase@users.noreply.github.com>
Co-authored-by: Nicolò Pretto <info@npretto.com>
Co-authored-by: Aleksandr Lesnenko <alxnddr@users.noreply.github.com>
Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
* Patch the metabot-v3 merge (#57731)
* Remove unused props from the "New" menu
* Remove Metabot code related to the "New" menu
* Fix flaky e2e test in the onboarding `setup` spec (#57735)
* remove unused slider component (#57745)
* [Admin] Modernize components for People + Groups pages (#57365)
* update components in frontend/src/metabase/admin/people/components to use Mantine components and remove deprecated component usage
* update people and group pages/modals to use more modern components
* use relative sizes
* fix user success modal not closing on "Done" confirm button click
* remove CS from PeopleListRow
* clean up admin/people/colors.ts
* lint fix
* people list footer fix
* pr feedback
* [Admin] Convert people / group pages to RTKQuery (#57490)
* update components in frontend/src/metabase/admin/people/components to use Mantine components and remove deprecated component usage
* update people and group pages/modals to use more modern components
* use relative sizes
* fix user success modal not closing on "Done" confirm button click
* remove CS from PeopleListRow
* clean up admin/people/colors.ts
* lint fix
* people list footer fix
* pr feedback
* wip
* fix issues, people page updates, some clean up
* add unsaved files
* type fix, fetch user list from rktquery for PeopleList
* remove entity usage from unsubscribe modal, lint fix
* remove all remaining usages of user entity
* remove user entity
* test fixes, remove unused user schema
* bit of clean up
* qa pass - invalidate groups cache if user is deactivated/reactivated
* address pr feedback
* Bump org.apache.poi/poi-ooxml-full from 5.4.0 to 5.4.1 (#56357)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
* Add analytics for new entity creation being initiated (#57673)
This commit adds analytics to the:
1. New button being clicked
- In the top app bar
- From the empty collection
2. New menu individual items being clicked:
- Dashboard
- ~Question~ (not possible at the moment)
- ~Native query~ (not possible at the moment)
3. An entity creation being initiated
- Model from the /browse/models page
- Metric from the /browse/metrics page
- Collection from the collection header
- Collection from the main nav sidebar
* Bump io.github.eerohele/pp from 9598f4c72b528480a85ea41651c45b08d1717428 to 4998a1fdd9d3713d7034d04509e9212204773bf2 (#57577)
Inspect dependency changes here: 9598f4c72b...4998a1fdd9
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
* Bump commons-io/commons-io from 2.18.0 to 2.19.0 (#56654)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
* Shutdown index sync while its results are unused (#56885)
* Shutdown index sync while its results are unused
* Update tests
* Update mongo tests
* Bump com.google.guava/guava from 33.4.6-jre to 33.4.8-jre (#56952)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
* Bump com.amazonaws/aws-java-sdk-core from 1.12.782 to 1.12.783 (#57586)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
* Bump io.github.tonsky/clj-reload from 0.9.4 to 0.9.5 (#57578)
Inspect dependency changes here: https://github.com/tonsky/clj-reload/blob/0.9.5/CHANGELOG.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump babashka/fs from 0.5.24 to 0.5.25 (#57575)
Inspect dependency changes here: https://github.com/babashka/fs/blob/v0.5.25/CHANGELOG.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump org.apache.calcite.avatica/avatica from 1.25.0 to 1.26.0 (#54171)
Inspect dependency changes here: https://github.com/apache/calcite-avatica/compare/avatica-1.25.0-rc0...avatica-1.26.0-rc0
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* fix: do not render gauge if grouping col is date (#56715)
* fix: toolbar button color not changing on hover (#56694)
* Bump refactor-nrepl/refactor-nrepl from 3.10.0 to 3.11.0 (#57584)
Inspect dependency changes here: https://github.com/clojure-emacs/refactor-nrepl/blob/v3.11.0/CHANGELOG.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump org.jsoup/jsoup from 1.19.1 to 1.20.1 (#57583)
Inspect dependency changes here: https://github.com/jhy/jsoup/blob/jsoup-1.20.1/CHANGES.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* [Backend modularization] `view-log` module (DEV-427) (#57628)
* [Backend modularization] Move anonymous-stats-related stuff into `analytics` module (DEV-437) (#57631)
* Bump org.eclipse.jetty.ee9.websocket/jetty-ee9-websocket-jetty-server from 12.0.19 to 12.0.20 (#57579)
* Bump org.eclipse.jetty.ee9.websocket/jetty-ee9-websocket-jetty-server from 12.0.19 to 12.0.20
Inspect dependency changes here:
* Update deps.edn
---------
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Edward Paget <edpaget@users.noreply.github.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump com.taoensso/nippy from 3.4.2 to 3.5.0 (#56953)
Inspect dependency changes here: https://github.com/taoensso/nippy/blob/v3.5.0/CHANGELOG.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
* Bump com.ibm.icu/icu4j from 76.1 to 77.1 (#55241)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump thheller/shadow-cljs from 2.28.21 to 2.28.23 (#56657)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* `date(datetime)` integration branch (#57448)
* Empty
* kick ci
* Allow temporal type in addition to string for `date()`
* Add date(datetime) test
* Use cast for date for postgres
* Extend date() on mysql
* Extend date() on bigquery
* Extend date() at snowflake
* Extend date() to datetime on clickhouse
* Generalize `date()` to :sql
* Update changelog with `date(datetime)`
* Update helper text string for date
* Add e2e tests for date
* Also check to correct coercion of dates
* Better check
* kick ci
* Format code
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
* Bump org.apache.poi/poi from 5.4.0 to 5.4.1 (#56355)
* Bump org.apache.poi/poi from 5.4.0 to 5.4.1
Inspect dependency changes here:
* Update deps.edn
---------
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump cider/cider-nrepl from 0.55.4 to 0.55.7 (#57576)
Inspect dependency changes here: https://github.com/clojure-emacs/cider-nrepl/blob/v0.55.7/CHANGELOG.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump org.postgresql/postgresql from 42.7.4 to 42.7.5 (#57314)
Inspect dependency changes here: https://github.com/pgjdbc/pgjdbc/blob/REL42.7.5/CHANGELOG.md
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump clj-kondo/clj-kondo from 2025.02.20 to 2025.04.07 (#56650)
* Bump clj-kondo/clj-kondo from 2025.02.20 to 2025.04.07
Inspect dependency changes here: https://github.com/clj-kondo/clj-kondo/blob/v2025.04.07/CHANGELOG.md
* Add kondo ignore to tests for new :missing-protocol-method linter
---------
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Mike Appleby <86076+appleby@users.noreply.github.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Bump thheller/shadow-cljs from 2.28.21 to 3.0.4 (#57585)
Inspect dependency changes here:
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
* Remove unused code in embedding data picker (#57700)
* Remove unused exported components
* Remove references to metrics
* Remove references to saved questions
* Remove irrelevant tests
* Remove unnecessary prop
* Fix more unit tests
* Remove more unnecessary code
* Fix failed unit tests
* Remove unnecessary prop
* speed up notification tests (#57763)
* Update logger presets (#57667)
* Update presets
* Update presets
* Update test
* Apply suggestions from code review
Co-authored-by: appleby <86076+appleby@users.noreply.github.com>
---------
Co-authored-by: appleby <86076+appleby@users.noreply.github.com>
* better snowplow errors when expecting the wrong number of good events (#57730)
* add ?. to make it more resilient
* add more logssss
* cy.log
* some nicer error message
* fix eventType
* removes leftover lines
* typos on comments
* Update e2e/support/helpers/e2e-snowplow-helpers.js
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
Co-authored-by: Raphael Krut-Landau <raphael.kl@gmail.com>
Co-authored-by: Cam Saul <1455846+camsaul@users.noreply.github.com>
Co-authored-by: Ryan Laurie <30528226+iethree@users.noreply.github.com>
Co-authored-by: Sloan Sparger <sloansparger@gmail.com>
Co-authored-by: Alexander Polyankin <alexander.polyankin@metabase.com>
Co-authored-by: Ngoc Khuat <qn.khuat@gmail.com>
Co-authored-by: Nemanja Glumac <31325167+nemanjaglumac@users.noreply.github.com>
Co-authored-by: Uladzimir Havenchyk <125459446+uladzimirdev@users.noreply.github.com>
Co-authored-by: metamben <103100869+metamben@users.noreply.github.com>
Co-authored-by: Tyler Plude <tsplude@gmail.com>
Co-authored-by: Phoomparin Mano <poom@metabase.com>
Co-authored-by: Mihael Konjević <konjevic@gmail.com>
Co-authored-by: John Swanson <john.swanson@metabase.com>
Co-authored-by: Aleksandr Lesnenko <alxnddr@gmail.com>
Co-authored-by: Thomas Schmidt <thomas@metabase.com>
Co-authored-by: Mahatthana (Kelvin) Nomsawadi <me@bboykelvin.dev>
Co-authored-by: github-automation-metabase <166700802+github-automation-metabase@users.noreply.github.com>
Co-authored-by: Nicolò Pretto <info@npretto.com>
Co-authored-by: Aleksandr Lesnenko <alxnddr@users.noreply.github.com>
Co-authored-by: Phoomparin Mano <phoomparin@gmail.com>
Co-authored-by: Sloan Sparger <sloansparger@users.noreply.github.com>
Co-authored-by: Metabase bot <metabase-bot@metabase.com>
Co-authored-by: lbrdnk <lbrdnk@users.noreply.github.com>
Co-authored-by: Adithya Vardhan <imadithyavardhan@gmail.com>
Co-authored-by: Edward Paget <edpaget@users.noreply.github.com>
Co-authored-by: Mike Appleby <86076+appleby@users.noreply.github.com>
* add ?. to make it more resilient
* add more logssss
* cy.log
* some nicer error message
* fix eventType
* removes leftover lines
* typos on comments
* Update e2e/support/helpers/e2e-snowplow-helpers.js
Co-authored-by: Phoomparin Mano <poom@metabase.com>
---------
Co-authored-by: Phoomparin Mano <poom@metabase.com>
* Empty
* kick ci
* Allow temporal type in addition to string for `date()`
* Add date(datetime) test
* Use cast for date for postgres
* Extend date() on mysql
* Extend date() on bigquery
* Extend date() at snowflake
* Extend date() to datetime on clickhouse
* Generalize `date()` to :sql
* Update changelog with `date(datetime)`
* Update helper text string for date
* Add e2e tests for date
* Also check to correct coercion of dates
* Better check
* kick ci
* Format code
---------
Co-authored-by: Romeo Van Snick <romeo@romeovansnick.be>
This commit adds analytics to the:
1. New button being clicked
- In the top app bar
- From the empty collection
2. New menu individual items being clicked:
- Dashboard
- ~Question~ (not possible at the moment)
- ~Native query~ (not possible at the moment)
3. An entity creation being initiated
- Model from the /browse/models page
- Metric from the /browse/metrics page
- Collection from the collection header
- Collection from the main nav sidebar
* update components in frontend/src/metabase/admin/people/components to use Mantine components and remove deprecated component usage
* update people and group pages/modals to use more modern components
* use relative sizes
* fix user success modal not closing on "Done" confirm button click
* remove CS from PeopleListRow
* clean up admin/people/colors.ts
* lint fix
* people list footer fix
* pr feedback
* wip
* fix issues, people page updates, some clean up
* add unsaved files
* type fix, fetch user list from rktquery for PeopleList
* remove entity usage from unsubscribe modal, lint fix
* remove all remaining usages of user entity
* remove user entity
* test fixes, remove unused user schema
* bit of clean up
* qa pass - invalidate groups cache if user is deactivated/reactivated
* address pr feedback
* update components in frontend/src/metabase/admin/people/components to use Mantine components and remove deprecated component usage
* update people and group pages/modals to use more modern components
* use relative sizes
* fix user success modal not closing on "Done" confirm button click
* remove CS from PeopleListRow
* clean up admin/people/colors.ts
* lint fix
* people list footer fix
* pr feedback
We don't support the `zh` (Traditional Chinese) locale anymore – only `zh-CN` (Simplified Chinese), and `zh-HK` (Hong Kong), and `zh-TW` (Taiwan). Here's a [Slack discussion](https://metaboat.slack.com/archives/C6UBFU9GW/p1741983889165599).
So let's remove `zh` from the list of supported translations.
For some reason the list wasn't sorted alphabetically by language name - this PR fixes that too.
* convert UnsubscribeUserModal and UnsubscribeUserForm components
* convert UserActivationModal to TS
* convert UserPasswordResetModal to TS
* convert UserSuccessModal to TS
* convert PeopleList and PeopleListingApp components to TS
* convert PeopleListRow to TS
* convert use-people-query to TS
* fix deprecated usages of google_auth and ldap_auth with sso_source field
* fix lint
* convert GroupsListing, GroupsListingApp, and AddRow components to TS
* convert lib/groups, AdminContentTable, and AddMemberRow to TS
* convert GroupDetailApp and GroupDetail to TS
* fix import
* convert GroupSummary to TS, make adjustments to other converted files to make types happy
* remove people/components/SearchInput and convert usage to mantine component to avoid TS migration
* remove styled component usage from people and groups pages and components
* adjustment to people listing app
* refactor: rename test file to tsx to have hopefully better diff in the
next commit
* fix EMB-360: Make Mantine components use the locale from LocaleProvider
* close EMB-373: make useLocale return the locale from LocaleProvider if
present
* Use Mantine dropdown for snippet menu
* Fix search icon in snippet header too
* Remove default ICON_SIZE
* Fix MIN_SNIPPETS_FOR_SEARCH
* Add createSnippet helper
* Add repro for metabase#57441
* Add test for snippet search
* Move snippet helper to api
* Use actual ref for input
* Simplify header search rendering
* Use SidebarHeader for snippet sidebar
* Use Flex for most components
* Simplify padding
* Use class component for archived snippets
* Use class for header button
* Use direct properties
* Rely less on custom css
* Fix header padding
* Fix e2e tests
* Remove unused eslint-disable
* Add type annotation
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
---------
Co-authored-by: Kamil Mielnik <kamil@kamilmielnik.com>
* Move SimpleDataPicker to a new directory preparing for new components
* Use the embedding data picker from a new folder
This requires turning the component into a plugin, which we'll do in the
next commit.
* Move plugin property to a more appropriate place
* Implement embedding multi-stage data picker as an EE plugin
* Add DataSourceSelectorProps
* Remove reference to query builder data picker
* Fix failing unit tests
* Move embedding data picker components to a proper location
* Update Appearance Settings
* unit test additions + updates
* update e2e tests
* test updates
* unit test fix
* fix lint errors
* obey the linter
* add test coverage
* add more tests
* support env var override ui
* remove dead code
* nicer routing
* useDisclosure
* stabilize test
* adding watermark for dynamic viz
* starting to put together e2e tests for watermarks
* adding unit test
* adding loki tests
* adding more e2e tests
* changing test id
* adding e2e tests on chart interactivity
* fixing type error
* Split up config into categories
* Break out clauses into groups
* Add duplicate name check
* Allow setting shared options
* Add category to mbql clause config
* Rename groups
* Use enum for category
* Build examples using helper functions
* Build ExpressionParts directly in helper-text
* Flatten examples
* Wrap example in function
* Enable late-binding for args
* Unwrap example
* Remove get name and get description wrappers
* Remove getHelpDocsUrl helper
* Simplify example fn
* Add missing export
* Remove getFunctionByStructure
* Simplify help text helpers
* Rename structure to displayName
* Make args required
* Manually type clause definition type
* Merge HELPER_TEXT_STRINGS into config
* Move help text helpers to separate file
* Use data from MBQL_CLAUSES instead of HELPER_TEXT_STRINGS
* Allow defining stuff in config
* Move help text into config
* Remove fallback to HELPER_TEXT_STRINGS
* Remove helper-text-strings
* Allow more stuff to be optional
* Build clause in getClauseDefinition
* Avoid self-referential types
* Use getClauseDefinition in completer
* Handle new args definition
* Handle null instead of undefined
* Enforce type on all argument definitions
* Enforce name on all argument definitions
* Get clause defns
* Fix types
* Simplify tests
* Remove unnecessary guard
* Avoid creating unnecessary functions
* Move defineClauses to separate module
* Remove any in config
* Rename helper-text-strings test to help-text
* Implement Tenant Groups
- normal users cannot be added to a tenant group
- tenant users cannot be added to a normal group
- tenant groups cannot receive write access to any collection
- tenant groups cannot receive any access to the audit collection
- tenant groups cannot receive any application permissions
* Add a setting to turn tenants off and on
When the setting is turned on:
- create the All External Users group, with
`magic_group_type=all-exsternal-users` and `is_tenant_group=true`
When the setting is turned off:
- make sure there are no remaining tenants or tenant users
- delete the All External Users group
* Remove the need for memoized `tenant?` functions
* Fix tests
* allowe using with-temp with perms group membership
* fix more tests
* remove unnecessary bindings
* Put setting behind a feature flag
* Don't read setting from env
closes adm-648
closes adm-657
closes adm-649
Resolves PRG-25
This PR adds a new button to the collection header menu. The button simply opens a new collection modal (lets you create a new collection). There are two important things to note about this change:
1. This button shows only when a user has a curate permissions for the current collection
2. This change required adding a new icon to our design system, which was approved by Maz.
Resolves PRG-20
This PR replaces the old `...` menu next to the "Collections" sidebar header. As a reminder, this menu was previously triggering a popup with two items:
1. New collection
2. Other users' personal collections (in case the user is an admin)
We're now improving the UX and replacing this menu with two distinct items:
1. The `+` icon that creates a new collection directly
2. The new individual sidebar link that leads to other users' personal collections (again, only if admin)
* update title sizes to match figma - add multi line title stories for lineheight examples
* little more line height in modal titles
* little fixes
* more little fixes
* reduce smartscalar title size
* Update Loki Snapshots
---------
Co-authored-by: Ryan Laurie <iethree@gmail.com>
Co-authored-by: Metabase Automation <github-automation@metabase.com>
* fix: add table-level sql based permission query
Some places in our code we may be returning fewer tables than a user has
access to because we load a limited number of models from the database
then apply permissions filters to those. This provides a subquery based
check for table permissions that we can use in other queries to do the
same kind of test for table access that we would do on the clojure-side.
Co-Authored-By: Nathan Voxland <nathan@metabase.com>
* fixup! restore check-permissions-for-model impl
* Update src/metabase/models/table.clj
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
* fixup! caluse -> clause spelling
* fixup! reformat malli annotations; add docstring
* fixup! add Literal type to honeysql helpers
* fixup! restore accidentally deleted clause
---------
Co-authored-by: Nathan Voxland <nathan@metabase.com>
Co-authored-by: Noah Moss <32746338+noahmoss@users.noreply.github.com>
* fix: filter button labels
* fix: part of EMB-335, uiName: t => getUiName: () => t
* fix linting issue
* fixed unit test mock missing getUiName
frontend/src/metabase/visualizations/components/Visualization/Visualization.unit.spec.js
missing
* make application-permissions.cy.spec.js pass
* cursor says this could fix the issue
* harder vibe coding
* remove handling of made up by llm elements that do not exist
---------
Co-authored-by: Aleksandr Lesnenko <alxnddr@gmail.com>
* Rename ALL_NODES to NODE_TYPE
* Remove unnecessary name override
* Remove unused EXPRESSION_OPERATOR_WITHOUT_ORDER_PRIORITY
* Use precedence from pratt compiler
* Move EDITOR_FK_SYMBOLS to identifier module
* Lift const descriptor
* Remove unused characters config
* Remove identifierAlwaysQuoted from EDITOR_QUOTES config and make the behaviour the default
* Move identifierDefaultQuote out of config and hard-code the behaviour
* Flatten default quotes config and move default into string module
* Remove wrong comment
* Use parseOperatorType to find operator type
* Remove separate operator groups
* Remove unused FUNCTIONS variable
* Remove barely used getExpressionName
* Use Boolean token to parse booleans
* Remove True and False from operators
* Rename Star and Slash to Multiply and Divide
* Remove FIELD_MARKERS
* Simplify config definition
* Inline getDescriptionForNow
* Move OPERATOR check to formatter
* Use normal quotes in config
* Split up MBQL_CLAUSES to avoid duplicating names
* Split clause helpers into separate files
* Fix sort order in completion tests
* Move operators to a separate group in config
* Use EXPRESSION_OPERATORS in formatter
* Export using star
* Rename OPERATOR to PUNCTUATOR
* Rename parseOperatorType to parsePunctuator
* Rename parseOperatorType to parsePunctuator
* Add helper for potential function prefixes
* Remove unused OPERATORS
* Remove superflouous helper
* Inline formatCallExpression
* Use Lib.ExpressionOperator where possible
* Remove impossible case for expression
* Inline isLogicOperator
* Rename variable for clarity
* Deduplicate helpers
* Move formatter helpers into utils
* Simplify helper
* Fix import order
* Remove reliance on PUNCTUATOR type
* Fix variable name
* Simplify punctuator definition
* Clean up lexifier
* Flatten lexifier results
* Remove errors for parser results
* Flatten parser result
* Simplify parser tests
* Remove cast
* Remove unused import
* Translate all error messages in formatter
* Simplify type
* Use sentence case name for type
When making sure stuff can load even with a loop, the circuit breaker was removed, leading to endless loops. That
would happen if the data causing the loop wasn't stripped properly. Right now if stripping things once did not help
and the entity is in the pipeline again, the process will break (with hopefully enough data to detect why).
This also changes the logic from exception to just recursive calls. Plus it's back at skipping all dashcards in a
Dashboard instead of just skipping visualization logic, which should make for a way faster processing (less deep for
sure). Plus it tries to improve logging a bit so it's easier to understand what's going on in complex cases.
* Remove Legacy Metrics code from the backend
* Code cleanup
* Test fix 🔧
* Test fix 🔧
* PR feedback
* Extra test
* Revert some X-Rays changes
* Remove commented-out test
* Test fixes 🔧
{clojure.core/print{:message"Use metabase.util.log instead of clojure.core/print"}
@@ -288,7 +292,10 @@
me.flowthing.pp/pprint{:message"Use metabase.util.log instead of me.flowthing.pp/pprint"}
medley.core/random-uuid{:message"Use clojure.core/random-uuid instead of medley.core/random-uuid"}
metabase.driver/database-supports?{:message"Use metabase.driver.util/supports? instead of metabase.driver/database-supports?"}
metabase.lib.equality/find-column-indexes-for-refs{:message"Use lib.equality/closest-matches-in-metadata or lib.equality/find-closest-matches-for-refs instead of lib.equality/find-column-indexes-for-refs"}}
metabase.lib.equality/find-column-indexes-for-refs{:message"Use lib.equality/closest-matches-in-metadata or lib.equality/find-closest-matches-for-refs instead of lib.equality/find-column-indexes-for-refs"}
next.jdbc/active-tx?{:message"Use metabase.app-db.core/in-transaction? to see if we are in a transaction"}
toucan2.core/debug{:message"Don't commit code using t2/debug"}
toucan2.tools.debug/debug{:message"Don't commit code using t2/debug"}}
:discouraged-namespace
{camel-snake-kebab.core{:message"CSK is not Turkish-safe, use the versions in metabase.util instead."}
- **UI**: `metabase/ui` components built with Mantine v8
- **Build**: Rspack (primary), Webpack (legacy)
- **Testing**: Jest + React Testing Library, Cypress
### Coding Standards
#### Component Preferences
- Prefer `metabase/ui`components over `metabase/common/components`
- Use `.tsx` for components, `.ts` for utilities
#### Styling
ALWAYS prefer Mantine style props,then CSS modules. DO NOT suggest styled components, they are deprecated.
#### TypeScript Migration
When heavily editing `.js`/`.jsx` files, create a separate PR to convert to TypeScript first, then implement changes.
#### Enterprise Features
Enterprise functionality MUST use the plugin system. It is very important to not expose enterprise code in the OSS version.
#### Testing Requirements
All PRs should include tests. Prefer Unit tests over E2E tests.
#### Localization
All user-facing strings MUST be localized using the ttag library. Localized strings should be complete phrases, do not concatenate a few separately localized strings. You should add context to strings where the meaning of the string might not be obvious in isolation: e.g. "Home" might have different words in some languages depending on whether you're talking about a dwelling or the landing page for a website.
- name:Comment on PR if 'not included in the documentation' error happens
uses:./.github/actions/notify-pull-request
if:success() || failure()
with:
remove-previous-comment:true
add-new-comment:${{ job.status == 'failure' }}
message:"📝 One or more internal Metabase types were accidentally exported from the `@metabase/embedding‑sdk‑react` package in this pull request.<br/><br/>Publishing these types would change the public API and may drastically change generated SDK documentation.<br/><br/>Please update the code so internal types remain private and the public API stays unchanged."
add-new-comment:${{ steps.docs-generation.outcome == 'failure' && contains(steps.docs-generation.outputs.output, 'not included in the documentation') }}
message:"📝 Some exported types from `@metabase/embedding-sdk-react` reference other types that are not exported, i.e. internal types.<br><br>The internal type reference breaks API documentation generation for the SDK and also may unexpectedly increase the output size of the type declaration file.<br><br>Please check the CI logs to find the name of such type.<br><br>- If a type should be publicly available in the SDK, add a description to it or a TypeDoc annotation and export it from SDK.<br>- If a type is internal and should _not_ be publicly exposed, refactor types to prevent referencing other types that are not exported from SDK.<br><br>You can run `yarn embedding-sdk:docs:generate` locally to verify that the issue has been resolved."
include-log:true
- name:Comment on PR if 'Failed to resolve link' error happens
message:"📝 A typedoc `{@link <TYPE_NAME>}` annotation is found that can't be resolved.<br><br>Most likely it happens when the referenced type is not exported. Please check the CI logs to find the name of such type.<br><br>- If a referenced in `{@link}` type should be publicly available in the SDK, add a description to it or a TypeDoc annotation and export it from SDK.<br>- If a type is internal and should _not_ be publicly exposed, change types to prevent unexported type reference in `{@link}` annotation.<br><br>You can run `yarn embedding-sdk:docs:generate` locally to verify that the issue has been resolved."
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.